【问题标题】:Filtering children in a Nested JsonPath过滤嵌套 JsonPath 中的子项
【发布时间】:2017-06-07 09:18:44
【问题描述】:

我必须验证以下 JSON:

{
    "data": {
    "children": [{
        "nodes": [{
            "key": "STATE",
            "value": "Alaska"
        }],
        "children": [{
            "nodes": [{
                "key": "STATE",
                "value": "Alaska"
            }, {
                "key": "NAME",
                "value": "Jack"
            }, {
                "key": "AGE",
                "value": "13"
            }]
        }, {
            "nodes": [{
                "key": "STATE",
                "value": "Alaska"
            }, {
                "key": "NAME",
                "value": "Jill"
            }, {
                "key": "AGE",
                "value": "23"
            }]
        }]
    }, {
        "nodes": [{
            "key": "STATE",
            "value": "Texas"
        }],
        "children": [{
            "nodes": [{
                "key": "STATE",
                "value": "Texas"
            }, {
                "key": "NAME",
                "value": "John"
            }, {
                "key": "AGE",
                "value": "23"
            }]
        }]
    }]
  }
}

JSON 中有两个嵌套列表,首先按“状态”分组,它包含包含名称值的子列表。 我只需要找到分组为“阿拉斯加”的名称。 我尝试了以下 JsonPath,但它返回 null:

 $.data..children[?(@nodes.value == 'Alaska')].children[?(@nodes.key=='NAME').value

我没有尝试过 GPath (findAll),但如果它是更好的解决方案,请告知。

提前致谢。

【问题讨论】:

    标签: json groovy soapui jsonpath rest-assured


    【解决方案1】:

    您可以使用内置的 Groovy JsonSlurper 来实现...假设您的 json 是变量 jsonTxt 中的字符串,您可以这样做:

    import groovy.json.*
    
    def names = new JsonSlurper().parseText(jsonTxt)
                                 .data
                                 .children
                                 .find { 'Alaska' in it.nodes.value }
                                 .children
                                 .nodes
                                 .flatten()
                                 .findAll { it.key == 'NAME' }
                                 .value
    
    assert names == ['Jack', 'Jill']
    

    【讨论】:

      猜你喜欢
      • 2022-06-21
      • 2020-05-26
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      相关资源
      最近更新 更多