使用jq从复杂的json对象创建复合对象

罗马·斯凯拉罗夫

我在JSON中有复杂的配置文件:

{
    "config": {
        ...,
        "extra": {
            ...
            "auth_namespace.com": {
                ...
                "name": "some_name",
                "id": 1,
                ...
            }
        },
        ...,
        "endpoints": [
            {   ...,
                "extra": {
                    "namespace_1.com": {...},
                    "namespace_auth.com": { "scope": "scope1" }
            }},
            {   ...
                # object without "extra" property
                ...
            },
            ...,
            {   ...
                "extra": {
                    "namespace_1.com": {...},
                    "namespace_auth.com": { "scope": "scope2" }
            }},
            {   ...
                "extra": {
                    # scopes may repeat
                    "namespace_auth.com": { "scope": "scope2" }
            }}
        ]
    }
}

我想获得具有属性“ name”“ id”“ scopes”的输出对象其中“作用域”是唯一值的数组。像这样:

{
    "name": "some_name",
    "id": 1,
    "scopes": ["scope1", "scope2" ... "scopeN"]
}

我可以分别获得这些属性。但是我不知道如何将它们结合在一起。

[
    .config |
    (
        .extra["auth_namespace.com"] |
        select(.name) |
        {name, id}
    ) as $name_id |

    .endpoints[] |
    .extra["namespace_auth.com"].scope |
    select(.)
] | unique | {scopes: .}

也许以下与您正在寻找的更接近:

.config
| (.extra."auth_namespace.com" | {id, name}) 
  + {scopes: .endpoints
             | map( select(has("extra"))
                    | .extra."namespace_auth.com"
                    | select(has("scope"))
                    | .scope )
             | unique }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章