json - 对 json 数组使用 jq 选择操作
问题描述
我有 2 个 json 数组:data1 和 data2。我正在尝试使用 jq 将 2 个 json 数组合并为一个 json。为此:我正在从 data1 中获取共享属性“region”,并尝试在 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
输出:
current region is "region1"
matching object is
current region is "region2"
matching object is
current region is "region3"
matching object is
解决方案
我不得不使用单引号。不是双引号。并且不需要命名参数。
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
推荐阅读
- python-3.x - [已解决]如何对 bot 在 discord.py 中发送的消息添加反应?
- python - 绘制二维随机游走的均方位移作为 δt 的函数
- c++ - 使用 LLVM 编写编译器后端:语句的返回值
- html - Outlook 电子邮件呈现中表格下方的小 1 像素间隙
- python - 如何将 pytest 夹具传递给测试
- sap-erp - SAP:根据销售类型加入合作伙伴功能数据
- angular - 用玩笑测试 Angular 11 时找不到名称“异步”
- matlab - 在 3D 图 Matlab 中获取点击的点坐标
- sql - 仅计算非重复值
- ansible - Ansible:homebrew_cask 抛出“无效的木桶:XXX”