jq 内部数组值作为数组外的新键

jq inner array value as new key outside the array

输入:

{
"data": {
    "assets": [{
            "organizationId": "1056bda9-2598-4fdf-bd99-db3924464a75",
            "createdAt": "2018-03-14T14:41:41.154Z",
            "tags": [{
                    "value": "raml",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "rest",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "api",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "v1",
                    "key": "product-api-version",
                    "mutable": false
                },
                {
                    "value": "has-mule4-connector",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "has-mule3-connector",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "system",
                    "key": null,
                    "mutable": true
                },
                {
                    "value": "sourcing",
                    "key": null,
                    "mutable": true
                }
            ],
            "type": "rest-api"
        },
        {
            "organizationId": "SASAAs",
            "createdAt": "2018-03-14T14:41:41.154Z",
            "tags": [{
                    "value": "raml",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "rest",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "api",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "v1",
                    "key": "product-api-version",
                    "mutable": false
                },
                {
                    "value": "has-mule4-connector",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "has-mule3-connector",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "system",
                    "key": null,
                    "mutable": true
                },
                {
                    "value": "supply-chain",
                    "key": null,
                    "mutable": true
                }
            ],
            "type": "rest-api"
        }   
    ]
}

}

预期输出:

{
"data": {
    "assets": [{
            "organizationId": "1056bda9-2598-4fdf-bd99-db3924464a75",
            "createdAt": "2018-03-14T14:41:41.154Z",
            "tags": [{
                    "value": "raml",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "rest",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "api",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "v1",
                    "key": "product-api-version",
                    "mutable": false
                },
                {
                    "value": "has-mule4-connector",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "has-mule3-connector",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "system",
                    "key": null,
                    "mutable": true
                },
                {
                    "value": "sourcing",
                    "key": null,
                    "mutable": true
                }
            ],
            "type": "rest-api",
            "domain": "sourcing"
        },
        {
            "organizationId": "SASAAs",
            "createdAt": "2018-03-14T14:41:41.154Z",
            "tags": [{
                    "value": "raml",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "rest",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "api",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "v1",
                    "key": "product-api-version",
                    "mutable": false
                },
                {
                    "value": "has-mule4-connector",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "has-mule3-connector",
                    "key": null,
                    "mutable": false
                },
                {
                    "value": "system",
                    "key": null,
                    "mutable": true
                },
                {
                    "value": "supply-chain",
                    "key": null,
                    "mutable": true
                }
            ],
            "type": "rest-api",
            "domain": "supply-chain"
        }   
    ]
}

}

到目前为止,我尝试了这个对我来说部分有用。

.data.assets[] | select (.tags[].value=="sourcing") | . += {"domain":"sourcing"}

问题是我希望此条件适用于数组中的每个对象,但我无法做到这一点。它仅应用于第一个对象。

我哪里做错了?请问有什么建议吗?

以下似乎符合描述要求:

.data.assets |=
  map( if any(.tags[].value; . == "sourcing")
       then . + {"domain":"sourcing"}
       else .
       end )

除了与描述要求不一致的 key-value 对 "domain": "supply-chain" 之外,这会产生所需的输出。

相比之下,以下内容从(即产生)给定输出中获取提示:

.data.assets |=
  map( if any(.tags[].value; . == "sourcing") then . + {"domain":"sourcing"}
       elif any(.tags[].value; . == "supply-chain") then . + {"domain":"supply-chain"}
       else . end )

将"domain"设置为所有标签值

.data.assets |= map( .domain += [.tags[].value] )