gpt4 book ai didi

java - 使用java枚举进行Json反序列化

转载 作者:行者123 更新时间:2023-12-01 17:54:49 25 4
gpt4 key购买 nike

我正在尝试将以下 JSON 反序列化为 java 对象。

"distance":[
{
"weight": 60,
"unit": "km"
},
{
"weight": 100,
"unit": "m"
}
]

java 对象应该如下所示:

[

{
"km": 60
},
{
"m": 100
}
]

最佳答案

这里我发现了两个问题,一是它的JSON格式不正确。应该是:

{
"distance":[
{
"weight": 60,
"unit": "km"
},
{
"weight": 100,
"unit": "m"
}
]
}

或者

[
{
"weight": 60,
"unit": "km"
},
{
"weight": 100,
"unit": "m"
}
]

另一个是,你没有明确提到你的POJO。您可以通过多种方式实现此响应。为了简单起见,我假设简单 Map为了它。

但是,我们首先需要使该字符串格式正确。

String jsonStr = "\"distance\":[\n" +
" {\n" +
" \"weight\": 60,\n" +
" \"unit\": \"km\"\n" +
" },\n" +
" {\n" +
" \"weight\": 100,\n" +
" \"unit\": \"m\"\n" +
" }\n" +
"]";
jsonStr = jsonStr.substring(jsonStr.indexOf(":") + 1);

创建一个类:

@Data
public class Distance {
private Double weight;
private String unit;
}

这里我使用 lombok 作为 getter 和 setter。

将 JSON 字符串解析到 Distance列表 :

ObjectMapper objectMapper = new ObjectMapper();
List<Distance> distances = objectMapper.readValue(jsonStr, new TypeReference<List<Distance>>(){});

现在您可以将此列表转换为您想要的响应。用于将此响应转换为 Map :

Map<String, Double> response = distances.stream().collect(Collectors.toMap(Distance::getUnit, Distance::getWeight));

或者,您可以将其转换为 List<Pair<String, Double>>还有:

List<Pair<String, Double>> response = new ArrayList<>();
distances.forEach(distance -> {
response.add(new Pair(distance.getUnit(), distance.getWeight()));
});

祝你编码愉快...

关于java - 使用java枚举进行Json反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60737690/

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