将动态嵌套Json对象映射到hashmap,并将键和值存储到逗号分隔的两个字符串变量中



我需要将dynamicmc-json嵌套对象映射到hashmap中,我可以想出解决方案,但无法获得预期的输出。

这是代码

HashMap<String, Object> map = new Gson().fromJson(dynamicJson, HashMap.class);
String keys = map.keySet().stream().collect(Collectors.joining(", "));
String values = map.values().stream().map(obj -> String.valueOf(obj)).collect(Collectors.joining(", "));
System.out.println("Keys: " + keys);
System.out.println("Values: " + values); 

样品Json

{
"name": "Notification 2", 
"message": "Facebook",
"tags":[
{
"city" : "Matara",
"village" : "Mirissa"
}      
]
}

实际输出:

名称,消息,标签通知2,Facebook,〔{city=Matara,村庄

预期输出

名称、消息、标签/城市、标签/村庄

通知2,Facebook,Matara,Mirissa

在上面的逻辑中,您没有处理子元素,请检查下面的代码哈希映射<字符串,对象>map=new Gson((.fromJson(dynamicJson,HashMap.class(;

Map<String, String> keyValueMap = new HashMap<>();
map.forEach((key, value) -> {
if (value instanceof List) {
((List)value).stream().forEach(obj -> { // processing sub elements 
if (obj instanceof Map) {
((Map)obj).forEach((k,v) -> {
keyValueMap.put(key+"/"+k, v.toString());
});
}
});
} else { // direct value, no subelement
keyValueMap.put(key, value.toString());
}
});

上面的逻辑只适用于List中的元素,因此您需要根据输入的json结构对上面的逻辑进行更通用的修改
下面的逻辑是打印可以优化的数据,我写了下面的逻辑,这样很容易理解

keyValueMap.forEach((k, v) -> { 
System.out.print(k+ ",");
});
System.out.println();

keyValueMap.forEach((k, v) -> {
System.out.print(v+ ",");
});

它将发出如下

name,tags/city,message,tags/village,
Notification 2,Matara,Facebook,Mirissa,


谢谢
普拉萨德

最新更新