如何从更深的层将对象绑定到数组 1 之外

How to bind objects out array 1 from layer deeper

我想建立一个 poker dex,在那里我可以看到关于所有口袋妖怪的所有信息。现在我使用 pokedex api https://pokeapi.co/api/v2/pokemon/3 并且我想要一个包含他所有统计数据的列表以及一个 pokemon。我得到的json被分成了2个对象

stats": [

    {
        "base_stat": 80,
        "effort": 0,
        "stat": {
            "name": "speed",
            "url": "https://pokeapi.co/api/v2/stat/6/"
        }
    },
    {
        "base_stat": 100,
        "effort": 1,
        "stat": {
            "name": "special-defense",
            "url": "https://pokeapi.co/api/v2/stat/5/"
        }
    },
    ......
]

这样它就不会自动链接到 1 个对象,例如:

stats": [

    {
        "base_stat": 80,
        "effort": 0,
        "name": "speed",
        "url": "https://pokeapi.co/api/v2/stat/6/"
    },
    {
        "base_stat": 100,
        "effort": 1,
        "name": "special-defense",
        "url": "https://pokeapi.co/api/v2/stat/5/"
    },
    ......
]

我该怎么做? 我试过了,这很有效,但它似乎不是解决方案。

public class Type {
    private PType type;
    private int base_stat;
    private int effort;

    public Type(PType type, int base_stat, int effort){this.type = type; this.base_stat = base_stat; this.effort = effort;}

    public class PType{
        private String name;
        public String getName() {return this.name;}
    }

    //getters&setters
    ....
}

使用 TypeAdapter (javadocs)。

    public static void main(String[] args) {
      String inputJson = "{\"base_stat\": 80,...}";
      Gson gson = new GsonBuilder().registerTypeAdapter(Stats.class, new StatsTypeAdapter()).create();
      Stats stats = gson.fromJson(inputJson, Stats.class);
    }

    class Stats {
      private int baseStat;
      private int effort;
      private String name;
      private String url;

      // getters/setters
    }

    public class StatsTypeAdapter extends TypeAdapter<Stats> {

      private static final JsonParser PARSER = new JsonParser();
      private static final Gson GSON = new GsonBuilder().create();

      @Override
      public void write(JsonWriter out, Stats value) throws IOException {
        if (value == null) {
          out.nullValue();
        } else {
          JsonObject json = new JsonObject();
          // convert back to JSON...
          out.jsonValue(GSON.toJson(json));
        }
      }

      @Override
      public Stats read(JsonReader in) throws IOException {
        JsonObject json = PARSER.parse(in).getAsJsonObject();
        Stats stat = new Stats();
        stat.setBaseStat(json.get("base_effort").getAsInt());
        stat.setEffort(json.get("effort").getAsInt());
        JsonObject statJson = json.getAsJsonObject("stat");
        stat.setName(statJson.get("name").getAsString());
        stat.setUrl(statJson.get("url").getAsString());
      }
    }