繁体   English   中英

使用JsonPath有条件地在JSON中提取外键值

[英]Conditionally extracting outer key-value in a JSON using JsonPath

这是我的JSON:

{
    "status": false,
    "responseData": [{
        "data": {
            "value": "value",
            "label": "label"
        },
        "type": "HEADING"
    }, {
        "data": {
            "section": "SECTION1",
            "post": {}
        },
        "type": "POST"
    }, {
        "data": {
            "section": "SECTION1",
            "post": {}
        },
        "type": "POST"
    }, {
        "data": {
            "section": "SECTION1",
            "post": {}
        },
        "type": "POST"
    }, {
        "data": {
            "section": "SECTION1",
            "value": "value",
            "label": "label",
            "type": "POSTS_LIST",
            "headerDetails": {
                "value": "value",
                "label": "label"
            },
            "metaData": {
                "params": {
                    "param1": "value1",
                    "param2": "value2"
                }
            }
        },
        "type": "CALL_TO_ACTION"
    }],
    "message": "OK"
}

我正在使用Jayway JsonPath进行数据提取。

问题:我想取回所有type值(例如CALL_TO_ACTION基于该部分的名称(例如) SECTION1 )。

我在https://jsonpath.curiousconcept.com上尝试的内容: $.responseData[*].[?(@.section=='SECTION1')].type ,但这给了我POSTS_LIST (显然是!),这就是内部type而不是我要查找的外部type属性。

您要过滤子级属性,然后返回父级属性。

更具体地说,在下面的示例中...

{
    "data": {
        "section": "SECTION1",
        "value": "value",
        "label": "label",
        "type": "POSTS_LIST",
        "headerDetails": {
            "value": "value",
            "label": "label"
        },
        "metaData": {
            "params": {
                "param1": "value1",
                "param2": "value2"
            }
        }
    },
    "type": "CALL_TO_ACTION"
}

...子级别属性为"section": "SECTION1" ,父级别属性为"type": "CALL_TO_ACTION"

不是由JayWay JsonPath虽然有一个目前支持的开放问题与它。 您也许可以解决该问题,并且/或者考虑提高其PR。

另外,您必须使用JSON反序列化器(例如@Wayne建议的Gson)将JSON反序列化为Map(或类似的)构造,然后可以对其进行过滤,并找到匹配项,然后在树上向上查找以找到您想要检索的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM