【问题标题】:JSONPath get the id of a parent element by a sub-child valueJSONPath 通过子值获取父元素的id
【发布时间】:2017-08-07 08:56:40
【问题描述】:

鉴于以下 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']

我的目标是获取featureValues 子元素default.name 等于Delta_K 的数据点的id 值。在示例中,这将是 kdl.240

【问题讨论】:

    标签: json jsonpath


    【解决方案1】:

    我只能通过以下方式解决我的问题的第一部分:

    $['datapoints'][*][?(@['default.name']=='Delta_K')]
    

    在研究过程中,我发现 jsonpath 不支持获取过滤节点的父节点。在http://www.baeldung.com/guide-to-jayway-jsonpath的第7章“结论”中写道:

    尽管 JsonPath 有一些缺点,例如缺少用于到达 父节点 或兄弟节点的运算符,但它在很多场景中都非常有用。

    此外,进一步的 SO 帖子对我没有帮助。

    【讨论】:

    • 谢谢;至少我知道我能做什么,不能做什么。
    【解决方案2】:
    #cat jsonData.json | jq ‘.datapoints[].featureValues | select .default.name == 'Delta_K') | .id’
    

    另见: https://github.com/adriank/ObjectPath/issues/70

    【讨论】:

      猜你喜欢
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多