鉴于以下JSON,我希望通过子子元素的等于文本比较来获取父级的id
字段:
{
"datapoints": [{
"id": "default.1",
"definedBy": "default/0.1",
"featureValues": {
"bui.displayname": "Health status",
"bui.visibility": "normal",
"default.access": "r",
"default.basetype": "text",
"default.description": "Aggregated health status",
"default.format": "text/plain",
"default.name": "health_status",
"default.restriction": "re:(OK|WARN|ERROR|UNKNOWN)"
}
}, {
"id": "kdl.240",
"definedBy": "kdl/0.9",
"featureValues": {
"bui.displayname": "Delta K",
"bui.visibility": "normal",
"default.access": "rw",
"default.basetype": "real",
"default.description": "Delta K",
"default.name": "Delta_K",
"default.privacy": "false",
"default.restriction": "b32"
}
}
]
}
我的第一个目标是通过子子文本比较获得正确的数据点,如:
$['datapoints'][*]['featureValues'][?(@['default.name']=='Delta_K')]
我在http://jsonpath.com/上测试时似乎无法正常工作 为了获得我成功使用的所有数据点:
$['datapoints'][*]['featureValues']['default.name']
我的目标是获取数据点的id
值,featureValues
子元素default.name
等于Delta_K
。在示例中,这将是kdl.240
。
答案 0 :(得分:1)
我只能使用以下方法解决问题的第一部分:
$['datapoints'][*][?(@['default.name']=='Delta_K')]
在我的研究中,我发现jsonpath不支持获取已过滤节点的父节点。在第7章"结论"撰写的http://www.baeldung.com/guide-to-jayway-jsonpath:
尽管JsonPath有一些缺点,例如缺少到达 父 或兄弟节点的运算符,但它在很多场景中都非常有用。
另外SO帖子也无法帮助我。
答案 1 :(得分:0)
#cat jsonData.json | jq ‘.datapoints[].featureValues | select .default.name == 'Delta_K') | .id’