JSON 有条件地在不同节点上获取值的路径
JSON path to fetch value on a different node conditionally
在下面的JSON例子中,当'contenttype'!='helptext'
时我只需要得到1个ID
我做不到'contenttype'=='textAreaSelectionLong'
,因为很多其他类型都是可能的。
因为是和id同级的不同节点,不知道怎么写成一个JSON路径表达式
我尝试了下面的 JSON 路径,
$.children[?(@.name=='p')].children[?(@.name=='@id')].text
它给了我,
[
"id2",
"id3"
]
但我期待 JSON 路径只能 return id2
下面是此示例所基于的 JSON 的一部分,
{
"children": [
{
"name": "@id",
"text": "id1",
"children": []
},
{
"name": "contenttype",
"text": "question",
"children": []
},
{
"name": "p",
"text": "Some random text 1",
"children": [
{
"name": "contenttype",
"text": "textAreaSelectionLong",
"children": []
},
{
"name": "@id",
"text": "id2",
"children": []
}
]
},
{
"name": "p",
"text": "Some random text 2",
"children": [
{
"name": "@id",
"text": "id3",
"children": []
},
{
"name": "contenttype",
"text": "helptext",
"children": []
}
]
}
]
}
谁能告诉我下面的 JSON 路径是否有意义。只是 更新 上述 JSON 路径?
$.children[?(@.name=='p' && @.children[?(@.name=='contenttype')].text!='helptext')].children[?(@.name=='@id')].text
显然,jsonpath.com 似乎没有正确解析它并给我预期的结果。我知道这在逻辑上是有道理的。但是,语法好吗?
如果您正在使用 Jayway JsonPath java port you can use the Filter Operator nin
JSONPath
$.children[?('helptext' nin @.children[*].text)].children[?(@.name=='@id')].text
在线测试工具:Jayway JsonPath Evaluator
在下面的JSON例子中,当'contenttype'!='helptext'
我做不到'contenttype'=='textAreaSelectionLong'
,因为很多其他类型都是可能的。
因为是和id同级的不同节点,不知道怎么写成一个JSON路径表达式
我尝试了下面的 JSON 路径,
$.children[?(@.name=='p')].children[?(@.name=='@id')].text
它给了我,
[
"id2",
"id3"
]
但我期待 JSON 路径只能 return id2
下面是此示例所基于的 JSON 的一部分,
{
"children": [
{
"name": "@id",
"text": "id1",
"children": []
},
{
"name": "contenttype",
"text": "question",
"children": []
},
{
"name": "p",
"text": "Some random text 1",
"children": [
{
"name": "contenttype",
"text": "textAreaSelectionLong",
"children": []
},
{
"name": "@id",
"text": "id2",
"children": []
}
]
},
{
"name": "p",
"text": "Some random text 2",
"children": [
{
"name": "@id",
"text": "id3",
"children": []
},
{
"name": "contenttype",
"text": "helptext",
"children": []
}
]
}
]
}
谁能告诉我下面的 JSON 路径是否有意义。只是 更新 上述 JSON 路径?
$.children[?(@.name=='p' && @.children[?(@.name=='contenttype')].text!='helptext')].children[?(@.name=='@id')].text
显然,jsonpath.com 似乎没有正确解析它并给我预期的结果。我知道这在逻辑上是有道理的。但是,语法好吗?
如果您正在使用 Jayway JsonPath java port you can use the Filter Operator nin
JSONPath
$.children[?('helptext' nin @.children[*].text)].children[?(@.name=='@id')].text
在线测试工具:Jayway JsonPath Evaluator