【发布时间】:2020-02-18 13:26:10
【问题描述】:
我需要帮助来通过 jq 创建一个有效的 JSON 文件,该文件从文件中读取行。
我有一些 text.txt 文件:
rabbit1-test1
rabbit1-test2
rabbit1-test3
还有 bash 脚本:
VHOSTNAME=/
NODENAME=node1
input="test.txt"
while IFS= read -r line; do jq -n \
--arg a "$VHOSTNAME" \
--arg b "$line" \
--arg c "$NODENAME" \
'{"data": [{"{#VHOSTNAME}": $a, "{#QUEUENAME}": $b, "{#NODENAME}": $c}]}' ;done < "$input"
但是,当我运行脚本时,JSON 无效:
{
"data": [
{
"{#VHOSTNAME}": "/",
"{#QUEUENAME}": "rabbit1-test1",
"{#NODENAME}": "node1"
}
]
}
{
"data": [
{
"{#VHOSTNAME}": "/",
"{#QUEUENAME}": "rabbit1-test2",
"{#NODENAME}": "node1"
}
]
}
{
"data": [
{
"{#VHOSTNAME}": "/",
"{#QUEUENAME}": "rabbit1-test3",
"{#NODENAME}": "node1"
}
]
}
我不明白为什么 jq 读取文件不正确。 请帮帮我。
【问题讨论】:
-
您期望/希望得到什么输出?这看起来确实像有效的 JSON 片段;你的意思是你想要它们之间的逗号?
-
这看起来确实像真正有效的 JSONS,因为您多次运行
jq并获得了几个有效的 JSON。 -
有效的 json 是 { "data": [ { "{#VHOSTNAME}": "/", "{#QUEUENAME}": "rabbit1-test1", "{#NODENAME}": "node1" }, { "{#VHOSTNAME}": "/", "{#QUEUENAME}": "rabbit1-test2", "{#NODENAME}": "node1" } ] }
-
如何为我的文件中的所有行创建一个 JSON?