更新 json 文件

更新 json 文件

我有一个file,实际上是 json 文件。如何在除最后一行之外的每一行末尾添加逗号?例如:

{"a":1, "b":1, "c":2}
{"a":3, "b":3, "c":1}
{"a":1, "b":2, "c":3}

我想要的是:

{"a":1, "b":1, "c":2},
{"a":3, "b":3, "c":1},
{"a":1, "b":2, "c":3}

答案1

您可以使用awk

awk 'NR > 1{print line","}{line=$0;}END{print $0}' jsonfile

答案2

您可以使用sed

sed '$n;s/$/,/' file
  • $n;意味着如果它是最后一行,则继续。
  • 否则它会,在行尾添加一个。
  • 如果添加-i标志(不是 POSIX),文件将被就地编辑。

如果必须是awk

awk 'NR>1{print p} {p=$0","}END{print}' file1
  • 将行的内容存储在变量中p
  • 除了最后一行之外,该变量都会被打印。
  • 当输入结束时,最后一行将按原样打印。

答案3

看起来这里的真正目标是从 JSON 实体流生成 JSON 数组。与 JSON 相关的一个很棒的工具是

https://stedolan.github.io/jq/

将 JSON 实体文件(例如 input.txt)转换为 JSON 数组的任务非常简单:

$ jq -s . input.txt

jq 还可以从 STDIN 获取输入。

答案4

原来的文件实际上是换行符分隔的 JSON(NDJSON)。

我建议安装而不是使用 GNU 工具json来自 NPM。

# say the file is test.log
$ json -f test.log -g
[
  {
    "a": 1,
    "b": 1,
    "c": 2
  },
  {
    "a": 3,
    "b": 3,
    "c": 1
  },
  {
    "a": 1,
    "b": 2,
    "c": 3
  }
]

相关内容