我有一个 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}" }}我正在使用 ObjectMapper API 来解析和获取值。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()); });;
3 回答

哈士奇WWW
TA贡献1799条经验 获得超6个赞
您可以通过 nameIdmap.getFieldNames 作为迭代器获取字段名称。然后你可以像这样迭代:
...
Iterator<String> fieldNames = idmap.getFieldNames();
while(fieldNames.hasNext()) {
String ip = fieldNames.next();
String textValue = idmap.get(ip).getTextValue()
System.out.println(ip + ":" + textValue);
}
如果嵌套信息也是 JSON,您可以通过 idmap.get(ip).get("ID"); 进一步访问它。如果没有,那么您仍然可以选择通过正则表达式找到它:
Pattern p = Pattern.compile("ID=(\\d+)");
Matcher m = p.matcher(textValue);
if(m.find()) {
System.out.println(ip + ":" + m.group(1));
}
添加回答
举报
0/150
提交
取消