![](/img/trans.png)
[英]How to conditionally extract a Json value using JayWay JsonPath?
[英]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.