Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jq如何从文件中读取行并创建有效的JSON?_Json_Linux_Bash_Jq - Fatal编程技术网

jq如何从文件中读取行并创建有效的JSON?

jq如何从文件中读取行并创建有效的JSON?,json,linux,bash,jq,Json,Linux,Bash,Jq,我需要帮助通过jq创建一个有效的JSON文件,jq从文件中读取行 我有一些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

我需要帮助通过jq创建一个有效的JSON文件,jq从文件中读取行

我有一些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"
我不明白为什么jq读取文件不正确。
请帮帮我。

为什么不使用jq的拆分

jq -Rs --arg a '/' --arg c 'node1' '[ .[:-1] |
      split("\n")[] |
      { "{#VHOSTNAME}" : $a , 
        "{#QUEUENAME}": . , 
        "{#NODENAME}": $c } ] |
       { "data" : . }' sample.txt
输出:


你希望得到什么样的产出?这看起来确实像是有效的JSON片段;你的意思是它们之间需要逗号吗?这看起来确实像是真正有效的JSON,因为你运行了几次jq并得到了几个有效的JSON。有效的JSON是{data:[{{VHOSTNAME}:/,{QUEUENAME}:rabbit1-test1,{NODENAME}:node1},{VHOSTNAME}:/,{QUEUENAME}:rabbit1-test2,{NODENAME}:node1}]}如何从我的文件中为所有行创建一个JSON?但是,当我不是从文件运行jq,而是使用while时,它不起作用。@perfect为什么需要一段时间?因为我需要rabbitMQ队列的脚本。我想通过命令-rabbitmqctl list_队列获取命令jq,所有队列都不使用.txt文件。您仍然不需要一段时间。rabbitmqctl list|u queues | jq-Rs-arg a'/'-arg c'node1'..对不起,我需要使用读取行。在rabbitMQ中,我有1000个队列,我必须读取100个队列块
jq -Rs --arg a '/' --arg c 'node1' '[ .[:-1] |
      split("\n")[] |
      { "{#VHOSTNAME}" : $a , 
        "{#QUEUENAME}": . , 
        "{#NODENAME}": $c } ] |
       { "data" : . }' sample.txt
{
  "data": [
    {
      "{#VHOSTNAME}": "/",
      "{#QUEUENAME}": "rabbit1-test1",
      "{#NODENAME}": "node1"
    },
    {
      "{#VHOSTNAME}": "/",
      "{#QUEUENAME}": "rabbit1-test2",
      "{#NODENAME}": "node1"
    },
    {
      "{#VHOSTNAME}": "/",
      "{#QUEUENAME}": "rabbit1-test3",
      "{#NODENAME}": "node1"
    }
  ]
}