我在一个文件中有以下数据集:
{
"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"
}
}
我想更新内容(我将json存储到一个变量中,因为我进行了几次更新,然后我将创建一个新文件),但要更新的数据的路径是可变的:
例如,我有:
DS_SRC_FILE="test.json"
DS_OBJECT=$(jq -c '' ${DS_SRC_FILE})
ds="audit1"
new_name="toto"
jq --arg ds ${ds} --arg name ${new_name} '.[]|select(.value==$ds)|=(.satellitename = $name)' <<< ${DS_OBJECT}
当然,这在parse error: Invalid numeric literal at line 2, column 36
中失败了
请问正确的方法是什么?
1条答案
按热度按时间lc8prwob1#
JSON不使用单引号。请使用双引号,或将数字不加引号。
命令仍会失败:以
.[]
开始的方法将丢弃对象的键并返回值,因此您不再可以访问“audit1”。此外,要更改值,您可以使用普通的
=
(以及没有select
),因为右侧对上下文不敏感:还要注意,我用双引号将shell变量引起来,这样即使它们包含空格,命令也能正常工作。