使用 jsonpath 选择多个属性

mni*_*eto 11 json jsonpath

我有一组像这样的对象:

[
    {
        "id": 192,
        "name": "Complete name",
        "username": "nsurname",
        "state": "active",
        "created_at": "2016-05-30T07:09:40.981Z",
        "organization": "",
        "last_sign_in_at": "2018-10-19T12:07:50.679Z",
        "confirmed_at": "2016-05-30T07:09:40.982Z",
        "last_activity_on": "2018-10-15",
        "email": "mail@myorganization.com",
        "current_sign_in_at": "2018-10-23T11:41:27.880Z",
        "identities": [
            {
                "provider": "ldapmain",
                "extern_uid": "user distinguished name"
            }
        ],
        "can_create_group": true,
        "can_create_project": false
    }
]
Run Code Online (Sandbox Code Playgroud)

我想要的是只提取属性的一个子集并得到如下内容:

[
   {
      "id" : 192,
      "name" : "complete name",
      "username" : "uname",
      "email" : "mail@myorganization.com",
      "extern_uid": "user distinguished name"
   }
]
Run Code Online (Sandbox Code Playgroud)

基于此答案,我使用http://jsonpath.herokuapp.com/ 上的Jayway JsonPath Evaluator 成功获得了带有此表达式的 id、name、username 和 email 属性

$..['id', 'name', 'username', 'email']
Run Code Online (Sandbox Code Playgroud)

但是如何获得不同等级的属性呢?外部用户名

B. *_*tty 8

我本来会把它放在评论中,但我认为这会更容易阅读。您可以只解析答案,然后使用 Stringify 重新创建您想要的 JSON 对象。我能够从这里提取我曾经提出的基本代码,/sf/ask/2343150001/

我不知道这是否真的有效,但我希望它至少能为您指明找到解决方案的正确道路。

我的答案:

var parsed = JSON.parse(thisObjectYouLinked);//here you would put whatever JSON object you displayed

var newObject = JSON.stringify({
    $..['id', 'name', 'username', 'email']
    $.identies[*].['extern_uid']
});
Run Code Online (Sandbox Code Playgroud)

长话短说,与其尝试弄清楚 JSONPath 的东西,为什么不直接解析并创建自己的对象呢?

  • 这是一个很好的起点。我最终使用 .NET 基于 JMESPATH 规范创建了一个小型命令行应用程序 (4认同)