使用shell脚本解析Json对象

我正在尝试使用shell脚本解析以下json对象:

country.json

 {
        "countries": [
            {"country":"India","city":["India1","India2","India3"]},
            {"country":"USA","city":["USA1","USA2","USA3"]}
           
           ]
    }

我想要的结果应该是:

country:India, city:India1
country:India, city:India2
country:India, city:India3

country:USA, city:USA1
country:USA, city:USA2
country:USA, city:USA3 

我在shell脚本中使用jq来迭代上面的json,如下所示:

for k in $(jq '.countries | keys | .[]' country.json); do
    countryObj=$(jq -r ".countries[$k]" country.json);
    countryValue=$(jq -r '.country' <<< "$countryObj");
    city_array=$(jq -r '.city' <<< "$countryObj");
    echo $city_array
done 

由此我可以得到city_array,即["India1","India2","India3"]["USA1","USA2","USA3"],但我不能得到上面提到的所需输出

✅ 最佳回答:

这完全可以在jq中完成。

jq -r '
   .countries |
   map(
      .country as $country |
      .city | map("country: \( $country ), city: \( . )\n") | add
   ) |
   join("\n")
'

Gives:

country: India, city: India1
country: India, city: India2
country: India, city: India3

country: USA, city: USA1
country: USA, city: USA2
country: USA, city: USA3

jqplay


如果你不需要那空行,那就简单多了。

jq -r '
   .countries[] |
   .country as $country |
   .city[] |
   "country: \( $country ), city: \( . )"
'

jqplay