如何使用jq将多个json对象与分隔符逗号连接在一起

时间:2017-06-28 20:33:40

标签: json bash jq

这是我的数据:

{
  "ReferringUrl": "N",
  "OpenAccess": "0",
  "ItmId": "1694738780"
}
{
  "ReferringUrl": "L",
  "OpenAccess": "1",
  "ItmId": "1347809133"
}

我希望它是这样的:

[
 {
  "ReferringUrl": "N",
  "OpenAccess": "0",
  "ItmId": "1694738780"
 },
 {
   "ReferringUrl": "L",
   "OpenAccess": "1",
   "ItmId": "1347809133"
 }
]

如何使用jq库制作它?我用bash。谢谢! :)

2 个答案:

答案 0 :(得分:6)

假设JSON对象的序列在一个名为input.json的文件中,只需“啜饮”它:

jq -s . input.json

如果对象分布在多个文件上,比如输入* .json,则可以运行:jq -s。输入*上传.json

处理无效的JSON

如果“对象”最初显示(即,严格来说不是JSON有效),那么您可以使用命令行工具,例如any-jsonjson5或{{1}将它们一次转换为JSON。如果每个文件有多个准JSON对象,那么您可以使用hjsoncsplit来分割文件。

或者,如果对象遵循示例中建立的模式,则可以使用GNU sed:sed -z's /,(\ n})/ \ 1 / g'

答案 1 :(得分:-1)

如果无关的逗号始终在ItemId行上,请尝试

sed '1s/^/[/;/"ItemId":/s/,$//;$s/$/]/' file

我认为有一种方法可以让jq在不预处理的情况下读取该输入,因此您也可以在预处理器中完成所有工作并跳过jq