我有以下数据:
{
"storageSummary": "testvalue",
"audit1": {
"auditScore": 1,
"suspensionScore": 1,
"password" : "value1",
"onlineScore": 0.99743587,
"satelliteName": "us2.storj.io:7777"
},
"audit2": {
"auditScore": 1,
"suspensionScore": 1,
"password" : "valueX",
"onlineScore": 0.9992917,
"satelliteName": "saltlake.tardigrade.io:7777"
},
"audit3": {
"auditScore": 1,
"suspensionScore": 1,
"password" : "value72",
"onlineScore": 0.99930555,
"satelliteName": "ap1.storj.io:7777"
}
}
在bash中,我需要判断这些数据,以更新所有auditX
个对象的password
.
我试过以下几种方法:
jq ' .[] |select(has("auditScore")) '
但我在第一项上得到了一个错误:
jq: error (at <stdin>:23): Cannot check whether string has a string key
exit status 5
当我删除数据中的第一个项"storageSummary": "testvalue"
时,我可以遍历我的对象(但我的数据中有一些项没有auditscore
个键……)
最终目标是在bash for
循环中运行此结果以更新密码(并执行更具体的任务...)
你能给我指个方向吗?
编辑:谢谢PMF,是你让我继续前进.
现在,下一步(我应该打开一个新的线程吗?),我想做一些类似的事情:
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 "Working $(_jq '.satelliteName')..."
# then update $row's password...
done
- 如何才能在循环中显示对象名称
audit1
而不是satelliteName
- 如何更新此对象的密码?
谢谢