gpt4 book ai didi

java - jackson 开始反序列化两个级别

转载 作者:行者123 更新时间:2023-12-05 04:01:21 25 4
gpt4 key购买 nike

我有一个构造笨拙的 json 文件,如下所示:

{
"clientByClientId" : {
"123" : {
"clientId" : "123"
"moreFields" : "moreData"
}
"456" : {
"clientId" : "456"
"moreFields" : "moreData"
}
}
}

如您所见,此 json 的前两层是多余的。将其反序列化为 Client 对象集合的最佳方法是什么?我尝试使用在线 json to pojo 工具,但它们最终生成了名为“123”和“456”的类。理想情况下,我想使用 Jackson,但对其他解决方案持开放态度。

最佳答案

小提示:您的 JSON 格式不正确,因为它缺少几个逗号。添加这些后,这将对您有用。

首先,您需要一个类来表示Client:

public class Client {
private final int clientId;
private final String moreFields;

@JsonCreator
public Client(@JsonProperty("clientId") int clientId,
@JsonProperty("moreFields") String moreFields) {
this.clientId = clientId;
this.moreFields = moreFields;
}

@Override
public String toString() {
return "Client[clientId=" + clientId + ", moreFields=" + moreFields + "]";
}
}

现在,您只需创建 ObjectMapper 并遍历 clientByClientId 映射的元素,这可以通过以下方式完成:

ObjectMapper objectMapper = new ObjectMapper();
JsonNode node = objectMapper.readTree(json).get("clientByClientId");
Map<Integer, Client> clientMap = objectMapper.readValue(node.traverse(),
new TypeReference<Map<Integer, Client>>() {});
System.out.println(clientMap.values());

这段代码的输出是:

[Client[clientId=123, moreFields=moreData], Client[clientId=456, moreFields=moreData]]

关于java - jackson 开始反序列化两个级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55520785/

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