java - 如何使用java合并json中的重复键
问题描述
我的 json 看起来像
{
"data": [
{
"location":"hjjh",
"latitude":"56.65765",
"longitude":"65.6576"
}
],
"data": [
{
"location":"thfh",
"latitude":"67.65765",
"longitude":"5.6576"
}
]
}
如何使用 JAVA 将给定 json 的键合并到单个键,如下格式
{
"data": [
{
"location":"hjjh",
"latitude":"56.65765",
"longitude":"65.6576"
},
{
"location":"thfh",
"latitude":"67.65765",
"longitude":"5.6576"
}
]
}
在 json中组合重复键中讨论了同样的问题 谁能告诉我 java 中的修复
解决方案
我不确定JSON
您使用的是哪个库,这里有一种方法Jackson
可以实现您想要的。
首先,创建一个Data
只有一个成员的类 -Map<String, List<Object>>
对于它的 setter,用@JsonAnySetter
. 然后实现自定义的setter如下:
类数据
class Data {
private Map<String, List<Object>> map = new HashMap<>();
public Map<String, List<Object>> getMap() {
return map;
}
@JsonAnySetter
public void setMap(String key, List<Object> value) {
if (map.containsKey(key)) {
map.get(key).add(value.get(0));
} else {
map.put(key, Stream.of(value.get(0)).collect(Collectors.toList()));
}
}
}
代码片段
类Data
准备好后,您可以使用重复键反序列化给定的 JSON 字符串,Data
并通过以下代码片段将其序列化为预期的 JSON 字符串。
ObjectMapper mapper = new ObjectMapper();
Data data = mapper.readValue(jsonStr, Data.class);
System.out.println(mapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(data.getMap()));
控制台输出
{
"data" : [ {
"location" : "hjjh",
"latitude" : "56.65765",
"longitude" : "65.6576"
}, {
"location" : "thfh",
"latitude" : "67.65765",
"longitude" : "5.6576"
} ]
}
推荐阅读
- ionic-framework - Ionic 3 - 键盘无缘无故地向上推送内容,并超过其他内容
- python - Tensorflow 乘法广播(求和前的卷积)
- javascript - HTML Updating but Not Updating Visually
- r - Summary statistics from aggregated groups using data.table
- r - 使用词云比较R比较两组
- swift - 如何在 swift 中使用字典作为参数发出 http get 请求
- mongodb - 如何使用嵌套数组进行 mongodb 内连接?
- javascript - 为什么 socket.io 会减慢我的应用程序的速度?(注册护士)
- java - 使用二叉搜索树进行 Alpha Beta 修剪
- arm - STM32F4 设备上的 SPI 读取失败