jackson使用ObjectMapper java API解析JSON字符串
我有一个JSON,如下所示。目标是获得相应的“ip”、“PRODUCTTYPE”和“ID”值
{
"customerId": "dummy1",
"nameIdmap": {
"10.2.1.0": "{PRODUCTTYPE=null, ID=123}",
"10.2.1.3": "{PRODUCTTYPE=null, ID=456}",
"10.2.1.4": "{PRODUCTTYPE=null, ID=789}",
"10.2.1.5": "{PRODUCTTYPE=null, ID=193}"
}
}
我正在使用ObjectMapperAPI解析和获取这些值
ObjectMapper om = new ObjectMapper();
JsonNode node = om.readTree(stringToBeParsed);
String customerID = node.get("customerId").asText();
System.out.println("The Customer ID is ::: "+customerID);
JsonNode nameIdmap = node.get("nameIdmap");
StreamSupport.stream(nameIdmap.spliterator(), false).forEach(
kv -> {
System.out.println(kv.asText().split(",")[0] +" ,
"+kv.asText().split(",")[1]);
});
但问题是,我无法获取密钥,在这种情况下,密钥就是ip地址。尝试了不同的方法来实现,但没有得到我想要的
我检查了nameIdmap是否是数组nameIdmap.isArray()
,但它是false
我也在下面尝试过,但无法获得ip,即密钥
JsonNode nameIdmap = node.get("nameIdmap");
StreamSupport.stream(nameIdmap.spliterator(), false).collect(Collectors.toList())
.forEach(item -> {
System.out.println(item.asText());
});;
# 1 楼答案
您可以尝试自定义反序列化程序,如下所示
1。创建项目类 这是一个POJO,代表一个ID以及字符串和IPItem的映射
2。创建IPItem类 这是ID和ProductType的POJO
3。创建自定义反序列化程序
4。测试类
5。产出 SOItem[id=dummy1,map={10.2.1.0=SOIPItem[type=null,id=123],10.2.1.3=SOIPItem[type=null,id=456],10.2.1.5=SOIPItem[type=null,id=193],10.2.1.4=SOIPItem[type=null,id=789]]
# 2 楼答案
您可以通过nameIdmap获得字段名。getFieldNames作为迭代器。然后你可以这样迭代:
如果嵌套信息也是JSON,那么可以通过idmap进一步访问它。获取(ip)。获取(“ID”);如果没有,那么您仍然可以通过regex找到它,如下所示:
# 3 楼答案
处理这些场景的最佳方法是为json创建一个匹配的pojo。通过这种方式,您可以灵活地处理数据
创建这样的类
这段代码将把你的json翻译成SomeClass