从JSONPath表达式检索父值

时间:2017-12-20 12:58:05

标签: json parsing jsonpath

我需要从像这样的JSON中提取一些值......

{
    "array": [{
        "name": "aaaa",
        "alt_name": "alt_aaa",
        "data": "2015-03-17",
        "subArraycore": [{
            "codname": "codname_xxx",
            "version": "3.0.0"
        }]
    }, {
        "name": "bbb",
        "alt_name": "alt_bbb",
        "data": "2015-05-17",
        "subArraycore": [{
            "codname": "codname_xxx",
            "version": "3.1.0"
        }]
    }, {
        "name": "ccc",
        "alt_name": "alt_ccc",
        "data": "2015-10-17",
        "subArraycore": [{
            "codname": "codname_xxx",
            "version": "3.2.0"
        }]
    }, {
        "name": "ddd",
        "alt_name": "alt_ddd",
        "data": "2015-05-17",
        "subArraycore": [{
            "codname": "codname_xxx",
            "version": "3.1.0"
        }]
    }, {
        "name": "eee",
        "alt_name": "alt_eee",
        "data": "2015-10-17",
        "subArraycore": [{
            "codname": "codname_xxx",
            "version": "3.2.0"
        }]
    }]
}

...使用JSONPath。

当subArraycore.version =“3.1.0”时,我需要提取所有“名称”值。

使用$..subArraycore[?(@.version=="3.1.0")]我获取

[
    {
        "codname": "codname_xxx",
        "version": "3.1.0"
    },
    {
        "codname": "codname_xxx",
        "version": "3.1.0"
    }
]

这是正确的,但这只是JSONPath表达式的一部分,我认为我将用它来获取"name": "bbb""name": "ddd"这些我需要的名称值。如何修改此JSONPath表达式以获取它们?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

这样可行:

$.array[?(@.subArraycore[0].version === '3.1.0')].name

选择JS表达式array为真的subArraycore[0].version === '3.1.0'成员,并从那里获取name

结果:

[
  "bbb",
  "ddd"
]