我想使用Jq将文本文件数据转换为JSON

我想使用Jq将文本文件数据转换为JSON,json,bash,shell,scripting,jq,Json,Bash,Shell,Scripting,Jq,我在文件中有日期,看起来像 test,test test1,test1 我想把它转换成: {"test":"test","test1":"test1"} 为此,我尝试了jqjq-R-s-c'split(“\n”)” 但其格式[“test,test”,“test1,test1”,“”]jq 1.5的输出具有输入,这允许一个简单高效的解决方案: jq -R -n -c '[inputs|split(",")|{(.[0]):.[1]}] | add' input.txt 重要提示:不要忘记-

我在文件中有日期,看起来像

test,test
test1,test1
我想把它转换成:

{"test":"test","test1":"test1"}
为此,我尝试了jq
jq-R-s-c'split(“\n”)”


但其格式
[“test,test”,“test1,test1”,“”]

jq 1.5的输出具有
输入
,这允许一个简单高效的解决方案:

 jq -R -n -c '[inputs|split(",")|{(.[0]):.[1]}] | add' input.txt
重要提示:不要忘记
-n
选项,否则会丢失第一行

可供替代的 如果您的jq没有
输入
,那么如果可能的话,是时候升级了。否则:

jq -R -s '
  split("\n")
  | map(if index(",") then split(",")|{(.[0]):.[1]}
        else empty end)
  | add' input.txt

如@peak所示,将
输入
拆分
功能一起使用。但要将键/值合并到单个对象中,请使用以下方法:


reduce
方法将数组中的每个项减少为单个项。在这种情况下,我们指出每个项都应该分配给
$obj
变量,并且我们从空的
{}
对象开始。
reduce
方法的第二个参数指示如何将事情“简化”为单个项目。在本例中,我们正在添加/合并分配给我们开始使用的
{}
对象的
$obj
,然后返回结果对象以在下一次迭代中使用。所有迭代完成后,返回最终项(在本例中为组合对象)

只要使用标准unix shell实用程序(假设您在
file.txt
中输入),就可以实现您的要求:


bash$echo{\“$(有人请帮忙吗?:/谢谢。这正是我想要的输出。有可能输出在一行中吗?像这样
{“test”:“test”,“test1”:“test1”}
jq -Rn '[inputs|split(",")| {(.[0]): .[1]}] | reduce .[] as $obj ({}; . + $obj) ' input.csv
bash $ echo { \"$(<file.txt sed 's/,/":"/g' | paste -s -d, - | sed 's/,/","/g')\" } 
{ "test":"test","test1":"test1" }
bash $