使用jq替换字典中的数组值



我有一本字典,看起来像:

cat dictionary.json
[
{
"key": "key01",
"value": "value01"
},
{
"key": "key02",
"value": "value02"
},
{
"key": "key03",
"value": "value03",
"extraProperty": {
"foo": "bar"
}
},
{
"key": "key04",
"value": "value04"
}
]

然后,我有一个数组,它是:

echo $array
key01 key02 key03

预期输出:

value01 value02 value03

我在使用非json格式的数组制作jq时遇到了一些麻烦。我尝试了我找到的各种解决方案,但都不起作用。这篇文章jq-如何选择对象基于一个';白名单';的属性值似乎解决了类似的问题,但它不适用于我的输入:

echo $array | jq --argfile whitelist dictionary.json 'select(any(.key== $whitelist[]; .value))'
parse error: Invalid numeric literal at line 1, column 6

我还试着使用

jq -n --arg array $array --argfile whitelist dico.json 'select(any(.key== $whitelist[]; .valuee))'
jq: error: key02/0 is not defined at <top-level>, line 1:
key02
jq: 1 compile error

谢谢!

此处为

jq -r --arg array "$array" 
'from_entries | .[($array | split(" "))[]]' 
dictionary.json

输出

value01
value02
value03

有关详细信息,请参见man jq

使用INDEX/2,它构造了一个字典:

echo 'key01 key02 key03' |
jq -Rr --argfile dict dictionary.json '
INDEX($dict[]; .key) as $d
| split(" ") | map( $d[.]|.value )
| join(" ")'

收益率:

value01 value02 value03

如果您的jq没有INDEX,那么现在将是升级到jq1.6的绝佳时机;或者,你可以简单地通过谷歌搜索来获取它的def:jq "def INDEX"

最新更新