arrays - JQ 检查作为参数给出的数组中的值

标签 arrays json jq whitelist

我有一个简单的 JQ 过滤器可以根据“键”更新数组中的一些值,例如这是我的输入:

[
    {
        "Key": "IDontCare",
        "Value": "something"
    },
    {
        "Key": "Tag1",
        "Value": "123-456"
    },
    {
        "Key": "Tag2",
        "Value": "121-717"
    }
]

我想将两个标签都更新为一个新值(两者的值相同),所以我得到了这个有效的命令:

jq --arg NEW_VALUE '987-654' \
    '[.[] |= if(.Key=="Tag1" or .Key=="Tag2") then (.Value=$NEW_VALUE) else . end]'

但是我想在不同的运行中更新不同的标签,并想将它们作为另一个参数传递。但不确定如何更改 if() 以从参数中查找标签。

我尝试过类似的方法,但这显然不是正确的方法:

jq --argjson TAGS '["Tag1","Tag2"]' --arg NEW_VALUE '987-654' \
    '[.[] |= if(.Key|in($TAGS)) then (.Value=$NEW_VALUE) else . end]'

有什么想法吗?

最佳答案

您可以使用 IN 查看该值是否是列表的一部分,并使用 select as 使用更简单的更新赋值

jq --arg NEW_VALUE '987-654' --argjson TAGS '["Tag1","Tag2"]' '
   map(select( .Key | IN($TAGS[] ) ).Value |= $NEW_VALUE )' json

关于arrays - JQ 检查作为参数给出的数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68219855/

相关文章:

arrays - 什么是好的洗牌百分比?

javascript - 如何在React js中解析本地JSON文件?

json - 如何使用 jq 合并来自 2 个文件的 2 个 JSON 对象?

java - 在 json 输出中获取对象时遇到问题

python - 在 Python 中将 SQL 转换为 json

json - jq:错误:无法用字符串索引数组

json - 使用 jq 循环遍历 json 文件

javascript - 将对象数组转换为嵌套数组

python - numpy:根据多个条件将值设置为零

c - Qsort with array of struct 更改结构的内容