这是jq : loop through json and retrieve sets when key exists的后续版本。以下是数据集:
{
"storageSummary": 6.8624392E13,
"audit1": {
"auditScore": 1,
"suspensionScore": 1,
"onlineScore": 0.99743587,
"satelliteName": "us2.storj.io:7777"
},
"audit2": {
"auditScore": 1,
"suspensionScore": 1,
"onlineScore": 0.9992917,
"satelliteName": "saltlake.tardigrade.io:7777"
},
"audit3": {
"auditScore": 1,
"suspensionScore": 1,
"onlineScore": 0.99930555,
"satelliteName": "ap1.storj.io:7777"
}
}
我想通过它:当auditScore
为1时,我需要存储父对象名称(如audit1
)和onlineScore
。
现在,我有这样的东西:
DS_OBJECT=$(jq -c ' .[]|select(type == "object" and has("auditScore"))' ${DS_SRC_FILE})
for row in ${DS_OBJECT}; do
_jq() {
echo "${row}" | jq -r "${1}"
}
echo -e "Processing $(_jq '.satelliteName')..."
echo -e "onlineScore is $(_jq '.onlineScore')
done
因此,我需要提取parent object name
,而不是这段代码中的satelliteName
。如何使用bash和jq实现这一点(我更倾向于避免添加Ruby或任何其他语言,如前一个主题所建议的)?
1条答案
按热度按时间5w9g7ksd1#
您可以使用
to_entries
将对象转换为键值对列表。这个列表可以很容易地过滤和转换。我还建议不要在每个循环迭代中启动一个新的
jq
进程,而是生成正确的输出并解析它:或者直接在jq中执行所有操作: