为了账号安全,请及时绑定邮箱和手机立即绑定

使用 ObjectMapper java API 解析 JSON 字符串

使用 ObjectMapper java API 解析 JSON 字符串

慕的地8271018 2021-07-12 12:01:41
我有一个 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));

}


查看完整回答
反对 回复 2021-07-14
  • 3 回答
  • 0 关注
  • 292 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号