java - 如何从更深的层将对象绑定到数组 1
问题描述
我想建立一个扑克 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());
}
}
推荐阅读
- google-sheets - 谷歌表格查询在一个单元格内使用空格分隔符搜索多个列
- jira - Jira 插件安装
- javascript - 由于页面重新加载,Sweetalert 在出现后突然关闭
- node.js - 无法使用 node.js 上的 aws-sdk 更新 dynamoDb 上的项目
- java - Spring Security /login - 404 未找到
- azure-devops - 在 Azure DevOps 多阶段管道中部署预先存在的项目
- javascript - 将 AudioBuffer 转换为 ArrayBuffer / Blob 以供 WAV 下载
- c - 条件数据观察点在 ARM GDB 中不起作用
- ios - 在继续下一个代码iOS swift之前等待响应结果
- c# - 实体框架核心从父子集合中获取单个子