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

Arrays jq内部数组值作为数组外部的新键,arrays,jq,flatten,Arrays,Jq,Flatten,输入: } 预期产出: { "data": { "assets": [{ "organizationId": "1056bda9-2598-4fdf-bd99-db3924464a75", "createdAt": "2018-03-14T14:41:41.154Z", "tags": [{ "value": "raml", "key":

输入:

}

预期产出:

{
"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[]|选择(.tags[].value==“寻源”)|.+={“域”:“寻源”}

问题是我希望这个条件适用于数组中的每个对象,但我不能这样做。它仅应用于第一个对象


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

以下内容似乎符合描述要求:

{
"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 |=
  map( if any(.tags[].value; . == "sourcing")
       then . + {"domain":"sourcing"}
       else .
       end )
将“域”设置为所有标记值
您需要在
.data.assets[]
中指定位置。给定输出和指定目标之间存在不匹配。
“域”:“供应链”
来自哪里???这正是我要找的!100%达到了我的目的。非常感谢你。但我无法从bash脚本内部运行此命令?有什么问题吗
echo$response | jq.data.assets |=map(如果有(.tags[].value;==“sourcing”),然后.+{“domain”:“sourcing”}else.end)
您必须添加合适的引号(例如echo“$response”| jq”…),或者使用-f命令行选项。请参阅jq手册了解详细信息。这是我之前的错误。我更正了引语,它工作得很有魅力。向上投票!我有大约6个
elif
条件。为了避免这种情况,在
arr[“营销”、“供应链”、“采购”]
中声明数组并进行比较并获得相同的输出是否可行?是的,这是可能的,并且在掌握了jq的基本知识后很容易完成。同时,你表示要投赞成票……我投了反对票。他们说现在看不见了!
.data.assets |=
  map( if any(.tags[].value; . == "sourcing") then . + {"domain":"sourcing"}
       elif any(.tags[].value; . == "supply-chain") then . + {"domain":"supply-chain"}
       else . end )
.data.assets |= map( .domain += [.tags[].value] )