使用 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 进行数据提取。
问题:我想根据部分名称(例如 SECTION1
)获取所有 type
值(例如 CALL_TO_ACTION
)。
我在 https://jsonpath.curiousconcept.com 上尝试的内容:$.responseData[*].[?(@.section=='SECTION1')].type
,但这给了我 POSTS_LIST
(很明显!),这是内部 type
而不是外部 type
我正在寻找的属性。
您想过滤子级属性,然后 return 父级属性。
更具体地说,在下面的例子中...
{
"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 当前支持的不,尽管有一个与之相关的open issue。您或许可以对该问题投赞成票 and/or 考虑为其提出 PR。
或者,您必须使用 JSON 反序列化器(例如@Wayne 建议的 Gson)将您的 JSON 反序列化为 Map(或类似)构造,然后您可以对其进行过滤找到你的匹配项后,沿着树往回走,找到你想要检索的数据。
这是我的 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 进行数据提取。
问题:我想根据部分名称(例如 SECTION1
)获取所有 type
值(例如 CALL_TO_ACTION
)。
我在 https://jsonpath.curiousconcept.com 上尝试的内容:$.responseData[*].[?(@.section=='SECTION1')].type
,但这给了我 POSTS_LIST
(很明显!),这是内部 type
而不是外部 type
我正在寻找的属性。
您想过滤子级属性,然后 return 父级属性。
更具体地说,在下面的例子中...
{
"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 当前支持的不,尽管有一个与之相关的open issue。您或许可以对该问题投赞成票 and/or 考虑为其提出 PR。
或者,您必须使用 JSON 反序列化器(例如@Wayne 建议的 Gson)将您的 JSON 反序列化为 Map(或类似)构造,然后您可以对其进行过滤找到你的匹配项后,沿着树往回走,找到你想要检索的数据。