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 打印和分离键和值并将其添加到选择框中

如何使用jq根据内部数组中的值过滤对象数组?

如何从firebase数据库中检索数据作为字符串而不是字典并将其添加到数组中?

从数据库中检索值并将其存储为会话变量

jq 从数组中选择值,其中 json 没有任何根元素

如何从数据库特定的选定值添加到解码的 Json 数组