java - 如何从更深一层将对象绑定(bind)到数组 1 之外

标签 java json serialization gson

我想建立一个扑克 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
    ....
}

最佳答案

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

关于java - 如何从更深一层将对象绑定(bind)到数组 1 之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466432/

相关文章:

java - ElasticsearchRepository中的FindAllByColumn(List <String> columnValues)无法正常工作

Json 架构 "not in"枚举类型?

java - postman 请求不正确 - 错误字符串

c# - 将 Dictionary(string, List<string>) 序列化为 xml

python - 使用 Django Rest Framework 上传文件

java - 在linux命令上打开2个jar文件

javascript - 在 java 和 javascript 之间共享文件和数据的安全方法

django - 如何在 django-rest-framework 序列化程序中格式化时间?

java - Kxml2 如何将xml转换为wbxml?

json - 启动组件之前获取配置参数