从多个txt文件创建JSON文件

时间:2015-10-08 16:24:15

标签: javascript json bash jq

我有以下问题:

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

x

和key2.txt的类似结构。使用这些我想创建一个具有以下结构的json文件:

key1.txt:
val1
val2
val3
..

我希望问题很清楚。如果可能的话,我更喜欢用bash来做这件事。

2 个答案:

答案 0 :(得分:0)

尝试以下

#!/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

答案 1 :(得分:0)

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传递它们。

$ jq --argjson key1 "$(jq -R '.' key1.txt | jq -s '.')" \
     --argjson key2 "$(jq -R '.' key2.txt | jq -s '.')" \
     -n '{ key1: $key1, key2: $key2 }'