Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
Javascript 从多个txt文件创建JSON文件_Javascript_Json_Bash_Jq - Fatal编程技术网

Javascript 从多个txt文件创建JSON文件

Javascript 从多个txt文件创建JSON文件,javascript,json,bash,jq,Javascript,Json,Bash,Jq,我有以下问题: *我想要一个JSON文件,其中的键,{key1,key2}每个都有几个值,并且都写在一个txt文件中。每个键的txt文件如下所示: key1.txt: val1 val2 val3 .. 与key2.txt的结构类似。我想使用这些创建一个json文件,该文件具有以下结构: { key1: [ "val1" "val2" ... ] key2: [ "val1" "val2" ...

我有以下问题:

*我想要一个JSON文件,其中的键,{key1,key2}每个都有几个值,并且都写在一个txt文件中。每个键的txt文件如下所示:

key1.txt:
val1
val2
val3
..
与key2.txt的结构类似。我想使用这些创建一个json文件,该文件具有以下结构:

{
    key1:
    [ "val1"
      "val2"
       ...
    ]

    key2:
    [ "val1"
      "val2"
       ...
    ]
}
我希望问题是清楚的。如果可能的话,我更喜欢使用bash来实现这一点。

试试下面的一个

#!/bin/bash
json="{"
for f in <path of directory>/*.txt
do
filename=$(basename "$f")
filename="${filename%.*}"  
json=$json'"'$filename'"'": ["
while IFS= read -r line; do
echo $filename
json=$json'"'$line'",'
done < $f  
json="${json%?}"
json=$json"],"
done
json="${json%?}"
json=$json"}"
echo $json

jq可以使用-slurpfile选项读入多个文件。但是,这些文件必须是实际的json文件。因为您的文件不是json格式,所以需要转换它们

$ jq -R '.' key1.txt > /tmp/key1.json && \
  jq -R '.' key2.txt > /tmp/key2.json && \
  jq --slurpfile key1 /tmp/key1.json \
     --slurpfile key2 /tmp/key2.json \
     -n '{ key1: $key1, key2: $key2 }'
否则,如果不想处理临时文件,可以使用子shell创建json数组,并使用-argjson将它们传入


到目前为止你试过什么?共享您的代码,或者您希望从零开始编写代码?问题不清楚,这看起来更像是一个规范,并且没有提出任何问题或试图解决您发布的内容中显示的问题。对此问题,我深表歉意。我意识到这项任务是多么简单,它不值得在这里发表文章。很抱歉请注意-R选项允许jq读取非JSON文件。
$ jq --argjson key1 "$(jq -R '.' key1.txt | jq -s '.')" \
     --argjson key2 "$(jq -R '.' key2.txt | jq -s '.')" \
     -n '{ key1: $key1, key2: $key2 }'