使用 UNIX 命令行工具将 JSON 拆分为多行

Posted

技术标签:

【中文标题】使用 UNIX 命令行工具将 JSON 拆分为多行【英文标题】:Split a JSON to multiple lines using UNIX command line tools 【发布时间】:2021-03-01 07:54:02 【问题描述】:

我们有一个 JSON 文件需要多行而不是单行,如下所示,

this is the first block,this is the second block, really,this is the third you're kidding:no

我们希望它是这样的,以便可以将其馈送到外部程序以毫无问题地读取它,

this is the first block
this is the second block, really
this is the third you're kidding:no

我不是 awk、sed、cut 等简单文本处理工具方面的专家,但我确实尝试使用 sed 有一段时间没有成功。

cat test.json | sed 's/,/\n/g'
this is the first block
this is the second block, really
this is the third you're kidding:no

最好的方法是什么?

【问题讨论】:

似乎您在 sed 尝试中需要 \n 而不是 \n 您的输入不是 JSON 要成为 JSON,它需要在一个数组中,以 [ 开头并以 ] 结尾。你的真实数据是这样的吗? (如果是这样,jq -c '.[]' <infile.json 将完成这项工作)。 为了说明@CharlesDuffy的评论echo '["a":0,"b":1,"c":2]' | jq -c '.[]' 【参考方案1】:

Awk 替代方案:

awk 'BEGIN  RS="(,?)|(,?)"  /[[:alnum:]]/  print $0=""$0"" ' file

将记录分隔符设置为一个或多个逗号和 或 以及一个或多个逗号。然后,当遇到字母数字字符串时,为字符串添加前缀 ,附加 并打印

【讨论】:

【参考方案2】:

因为它不是 JSON,你只想拆分:

input_file

this is the first block,this is the second block, really,this is the third you're kidding:no
sed 's/,/\n/g' input_file

output

this is the first block
this is the second block, really
this is the third you're kidding:no

【讨论】:

我使用另一个 sed 命令删除了原始 JSON 文件的方括号,但你是对的,这个示例不再是 JSON。谢谢你的回答。

以上是关于使用 UNIX 命令行工具将 JSON 拆分为多行的主要内容,如果未能解决你的问题,请参考以下文章

将逗号分隔的单元格拆分为多行,保持原始行不变?

我可以在 Apache Pig Latin 中将命令拆分为多行吗?

Hive一行拆多行、多行拼一行

根据持续时间将行拆分为多行

将行拆分为多行 PL/SQL

基于逗号将行拆分为多行:一个班轮解决方案