【问题标题】:How to bind objects out array 1 from layer deeper如何从更深的层将对象绑定到数组 1
【发布时间】:2020-02-29 15:01:08
【问题描述】:

我想建立一个扑克 dex,我可以在其中查看所有口袋妖怪的所有信息。现在我使用 pokedex api https://pokeapi.co/api/v2/pokemon/3 并且我想列出他所有带有口袋妖怪的统计数据。我得到的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
    ....
}

【问题讨论】:

    标签: java json serialization gson


    【解决方案1】:

    使用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());
          }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 2012-01-22
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多