gpt4 book ai didi

java - 具有动态根 key 时如何反序列化 JSON

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:07 25 4
gpt4 key购买 nike

我遇到了这个 json 的问题。

{"1234345": [{
"queue": "XXX",
"name": "XXXXX",
"entries": [{
"points": 54,
"isInactive": false,
}],
"tier": "ASDF"
}]}

但它也可以有这样的形状:

{
"1234345": [{
"queue": "XXX",
"name": "XXXXX",
"entries": [{
"points": 54,
"isInactive": false,
}],
"tier": "ASDF"
}],
"22683144": [{
"queue": "XXX",
"name": "XXXXX",
"entries": [{
"points": 54,
"isInactive": false,
}],
"tier": "ASDF"
}]
}

根键是一个数组,它可以在每次调用服务时改变。因此它是动态的。

我对这个很生气。我听说使用动态键的最佳选择是使用 Map。但在这种情况下,我如何命名将包含该 map 的属性?在这种情况下是一个数组,我不知道它是否应该是一个映射或者如何创建相应的 POJO。有帮助吗?

首先我要做的是为条目创建一个类。

public class myEntry {
public String points;
public String isInactive;
}

然后是它的容器类。

public class myObject {
public String queue;
public String name,
public myEntry[] entries;
public String tier;
}

但我被困在这里,我不知道如何继续。

最佳答案

你总是可以使用 Map .考虑您在问题中发布的 JSON:

{
"1234345": [
{
"queue": "XXX",
"name": "XXXXX",
"entries": [
{
"points": 54,
"isInactive": false
}
],
"tier": "ASDF"
}
],
"22683144": [
{
"queue": "XXX",
"name": "XXXXX",
"entries": [
{
"points": 54,
"isInactive": false
}
],
"tier": "ASDF"
}
]
}

使用流行的 Java JSON 解析器 Jackson,它可以被解析为 Map<String,Object>。对象:

String json = "{\"1234345\":[{\"queue\":\"XXX\",\"name\":\"XXXXX\",\"entries\":["
+ "{\"points\":54,\"isInactive\":false}],\"tier\":\"ASDF\"}],"
+ "\"22683144\":[{\"queue\":\"XXX\",\"name\":\"XXXXX\",\"entries\":["
+ "{\"points\":54,\"isInactive\":false}],\"tier\":\"ASDF\"}]}";

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map =
mapper.readValue(json, new TypeReference<Map<String, Object>>() {});

而不是 Object ,您可以使用 POJO:

public class Foo {

private String queue;
private String name;
private String tier;
private List<Bar> entries;

// Getters and setters omitted
}
public class Bar {

private Integer points;
private Boolean isInactive;

// Getters and setters omitted
}

使用 Jackson,您的代码将如下所示:

String json = "{\"1234345\":[{\"queue\":\"XXX\",\"name\":\"XXXXX\",\"entries\":["
+ "{\"points\":54,\"isInactive\":false}],\"tier\":\"ASDF\"}],"
+ "\"22683144\":[{\"queue\":\"XXX\",\"name\":\"XXXXX\",\"entries\":["
+ "{\"points\":54,\"isInactive\":false}],\"tier\":\"ASDF\"}]}";

ObjectMapper mapper = new ObjectMapper();
Map<String, List<Foo>> map =
mapper.readValue(json, new TypeReference<Map<String, List<Foo>>>() {});

关于java - 具有动态根 key 时如何反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39522661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com