在bash中使用jq创建带有json对象数组的json文件



我有一个这样的输入行:1374240, 1374241。我需要制作json文件:

{
"version": "1.0",
"tests": [
{
"id": 1374240,
"selector": ""
},
{
"id": 1374241,
"selector": ""
}
]
}

我制作了关联数组:

idRow='1374240, 1374241'
IFS=',' read -r -a array <<<"$idRow"
trimmedArray=()
for id in "${array[@]}"; do
trimmedId="$(echo -e "${id}" | xargs)"
testRow="{"id":${trimmedId},"selector":""}"
trimmedArray+=("$testRow")
done
echo "${trimmedArray[*]}"

输出:

{"id":1374240,"selector":""} {"id":1374241,"selector":""}

如何将其插入最终的json结构中并编写文件?我尝试了jq的不同变体,但我最终无法获得结构。请帮帮我。

使用-R将数字作为原始文本读取,在,处拆分,使用tonumbers将其转换为数字,并动态创建结构:

echo "1374240, 1374241" | jq -R '
{version:"1.0",tests:(
split(",") | map(
{id: tonumber, selector: ""}
)
)}
'

演示

如果您可以从一开始就省略逗号,那么读取数字就更容易了,因为它们本身就是JSON:

echo "1374240 1374241" | jq -s '
{version:"1.0",tests: map(
{id: tonumber, selector: ""}
)}
'

演示

输出:

{
"version": "1.0",
"tests": [
{
"id": 1374240,
"selector": ""
},
{
"id": 1374241,
"selector": ""
}
]
}

最新更新