используя операцию выбора jq для массивов json - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть 2 массива json: data1 и data2.Я пытаюсь объединить 2 массива json в один json, используя jq.для этого: я выбираю общее свойство region из data1 и пытаюсь найти соответствующее в data2.Тем не менее, выбор jq не работает с параметром, который я передаю, но он работает с любым конкретным значением.

data1='[ 
 {"domain": "domain1", "region": "region1"}, {"domain": "domain2","region": "region2"}, { "domain": "domain3", "region": "region3"} ]'

data2='[ 
 {"region": "eustaging1", "secret": "s1"}, {"region": "eustaging2", "secret": "s2"}, { "region": "eustaging2", "secret": "s3"}]'

for k in $(jq -c '.[]' <<< "$data1"); do
    crgn=$(jq '.region' <<< $k)
    # select with parameter not working :(
    matching_obj=$(jq -c  '.[] | select(.region=="$crgn") ' <<< "$data2")
    echo "current region is $crgn" 
    echo "matching object is $matching_obj"
done

output:

 current region is "region1"
 matching object is
 current region is "region2"
 matching object is
 current region is "region3"
 matching object is

1 Ответ

0 голосов
/ 09 декабря 2018

Мне пришлось использовать одинарные кавычки.не двойные кавычки.и не нужно именованных параметров.

for k in $(jq -c '.[]' <<< "$data1"); do
    current_region=$(jq '.region' <<< $k)
    matching_obj=$(jq -c '.[] | select(.region=='$current_region')' <<< "$data2")
    echo "matching_obj is $matching_obj"
    echo "current region is $current_region" 
done
...