jq json根据条件从内部数组中检索值并将其添加到数组之外
Posted
技术标签:
【中文标题】jq json根据条件从内部数组中检索值并将其添加到数组之外【英文标题】:jq json retrieve value from an inner array based on condition and add it outside of array 【发布时间】:2018-09-01 12:45:55 【问题描述】:我的意见
"data":
"assets": [
"aDASD": "1056bda9-2598-4fdf-bd99-db3924464a75",
"KEY": "a7e2ef79-41aa-4a36-9ca1-1f388917eb12.ahnl",
"key2": "store-order-picking-units-api",
"key3": "1.0.1",
"tags": [
"value": "abcd",
"key": null,
"mutable": false
,
"value": "rest",
"key": null,
"mutable": false
,
"value": "123",
"key": null,
"mutable": false
,
"value": "system",
"key": null,
"mutable": true
,
"value": "market",
"key": null,
"mutable": true
],
"type": "mytype"
]
我想得到如下输出
"data":
"assets": [
"aDASD": "1056bda9-2598-4fdf-bd99-db3924464a75",
"KEY": "a7e2ef79-41aa-4a36-9ca1-1f388917eb12.ahnl",
"key2": "store-order-picking-units-api",
"key3": "1.0.1",
"tags": [
"value": "abcd",
"key": null,
"mutable": false
,
"value": "rest",
"key": null,
"mutable": false
,
"value": "123",
"key": null,
"mutable": false
,
"value": "system",
"key": null,
"mutable": true
,
"value": "market",
"key": null,
"mutable": true
],
"type": "mytype",
"newkey1": "system",
"newkey2": "market"
]
响应包含 newkey1 和 newkey2。现在,棘手的部分来了。填充 newkey1 时,值可以是“system”、“process”等,对于 newkey2,值可以是“market”、“finance”等。
换句话说,如果.data.assets[].tags[].values
中的任何一个是系统或进程等,则应填充 newkey1...类似地,仅当市场、金融等时才填充 newkey2。
它是复杂的还是首先使用 jq 可以实现?请帮忙。
【问题讨论】:
【参考方案1】:jq 是图灵完备的,所以你很幸运 :-)
您的要求并不完全清楚,但以下内容会产生您期望的输出,应该可以帮助您:
.data.assets |= map(
.newkey1 = if any(.tags[].value; . == "system") then "system" else null end
| .newkey2 = if any(.tags[].value; . == "market") then "market" else null end
)
这里的重点是:
|=
可用于更新;
any(stream; condition)
检查流中任何项目的条件是否为真
【讨论】:
天才。!谢谢,以上是关于jq json根据条件从内部数组中检索值并将其添加到数组之外的主要内容,如果未能解决你的问题,请参考以下文章
如何从嵌套 Json 数组角度 2 打印和分离键和值并将其添加到选择框中