猿问

使用 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}"

    }

}

我正在使用 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());

   });;


慕的地8271018
浏览 287回答 3
3回答

哈士奇WWW

您可以通过 nameIdmap.getFieldNames 作为迭代器获取字段名称。然后你可以像这样迭代:...Iterator<String> fieldNames = idmap.getFieldNames();while(fieldNames.hasNext()) {&nbsp; String ip = fieldNames.next();&nbsp; String textValue = idmap.get(ip).getTextValue()&nbsp; 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()) {&nbsp; System.out.println(ip + ":" + m.group(1));}
随时随地看视频慕课网APP

相关分类

Java
我要回答