首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackson JSON & Jayway JSON路径

Jackson JSON & Jayway JSON路径
EN

Stack Overflow用户
提问于 2018-06-04 14:37:02
回答 1查看 2.3K关注 0票数 0

我有一个json字符串如下所示

代码语言:javascript
复制
    {
     "haserrors": 
                 {
                   "errornumber": "400",
                   "errors": [
                               {
                                 "nameofbusiness-error-1": "nameofbusiness must have a length greater than 1",
                                 "nameofbusiness-error-2": "legalname must have a length greater than 1",
                                 "nameofbusiness-error-3": "postaladdress must have a length greater than 1",
                                 "nameofbusiness-error-4": "city must have a length greater than 1",
                                 "nameofbusiness-error-5": "state must have a length greater than 1",
                                 "nameofbusiness-error-6": "pincode must have a length greater than 6, pincode must be numeric, pincode must be positive",
                                 "nameofbusiness-error-7": "fewwords must have a length greater than 1",
                                 "nameofbusiness-error-8": "lob must have a length greater than 1",
                                 "nameofbusiness-error-9": "step must be numeric, step must be positive"
                              }
                            ]
                }
    }

我需要提取“错误”下的所有节点和值。这是我现在的代码

代码语言:javascript
复制
    Configuration conf = Configuration.builder().jsonProvider(new JacksonJsonNodeJsonProvider())
            .options(Option.ALWAYS_RETURN_LIST, Option.SUPPRESS_EXCEPTIONS).build();
    ArrayNode jsonErrorMessageNodes = JsonPath.using(conf).parse(<<JSON STRING ABOVE>>).read("$..errors");

  for (Iterator<JsonNode> it = jsonErrorMessageNodes.elements() ; it.hasNext() ; ) {
            JsonNode node = it.next();
            String s = node.toString();
            System.out.println(node);
        }

如何获得节点名称?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 16:16:05

下面的代码..。

代码语言:javascript
复制
Configuration conf = Configuration.builder().jsonProvider(new JacksonJsonNodeJsonProvider())
        .options(Option.ALWAYS_RETURN_LIST, Option.SUPPRESS_EXCEPTIONS).build();
ArrayNode jsonErrorMessageNodes = JsonPath.using(conf).parse(json).read("$..errors[*]");

for (Iterator<JsonNode> it = jsonErrorMessageNodes.elements() ; it.hasNext() ; ) {
    JsonNode node = it.next();
    for (Iterator<String> it1 = node.fieldNames(); it1.hasNext(); ) {
        final String s = it1.next();
        System.out.println(s);
    }
}

..。将打印出来:

代码语言:javascript
复制
nameofbusiness-error-1
nameofbusiness-error-2
nameofbusiness-error-3
nameofbusiness-error-4
nameofbusiness-error-5
nameofbusiness-error-6
nameofbusiness-error-7
nameofbusiness-error-8
nameofbusiness-error-9

这与您发布的代码之间的关键区别是JsonPath表达式。您使用的是:$..errors,它生成的内容如下:

代码语言:javascript
复制
[
   null,
   [
      {...}
   ],
   null
]

因此,为了找到您感兴趣的节点,需要遍历多个节点,相比之下,这个表达式:只返回 errors数组。

代码语言:javascript
复制
[
   {...}
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50683057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档