【问题标题】:using jq select operation on json arrays对 json 数组使用 jq 选择操作
【发布时间】:2018-12-09 10:09:53
【问题描述】:

我有 2 个 json 数组:data1 和 data2。 我正在尝试使用 jq 将 2 个 json 数组合并为一个 json。 为此:我正在从 data1 中获取共享属性“region”,并尝试在 data2 中找到匹配的属性。 然而,jq 的 select 无法使用我传递的参数,但它确实适用于任何特定值。

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

输出:

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

【问题讨论】:

  • 请遵循minimal reproducible example 准则。期望的输出是什么?另外,请注意,根据问题的描述,似乎只有 jq 的解决方案可能是最好的(到目前为止)。

标签: json bash shell parsing jq


【解决方案1】:

我不得不使用单引号。不是双引号。并且不需要命名参数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    相关资源
    最近更新 更多