【问题标题】:Create JSON file from multiple txt files从多个 txt 文件创建 JSON 文件
【发布时间】:2016-01-06 09:24:43
【问题描述】:

我有以下问题:

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

key1.txt:
val1
val2
val3
..

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

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

    key2:
    [ "val1"
      "val2"
       ...
    ]
}

我希望问题很清楚。如果可能,我更喜欢使用 bash 来执行此操作。

【问题讨论】:

  • 到目前为止,您尝试了什么?分享您的代码,还是希望从头开始编写代码?
  • 问题不清楚,这看起来更像是一个规范,并且没有 question 询问或尝试解决您发布的内容中显示的问题
  • 我为这个问题道歉。我意识到这项任务是多么简单,而且它不值得在这里发帖。对不起!我会关闭帖子。

标签: javascript json bash jq


【解决方案1】:

试试下面一个

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

【讨论】:

    【解决方案2】:

    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 }'
    

    否则,如果您不想处理临时文件,您可以使用 subshel​​l 创建 json 数组并使用 --argjson 传递它们。

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

    【讨论】:

    • 请注意 -R 选项允许 jq 读取非 JSON 文件。
    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 2019-07-17
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多