在bash

时间:2015-11-26 12:06:14

标签: json bash jq

我从脚本中获取了无效的JSON,例如

{
  name: "Leo",
  active: true
}

是否有一个bash可安装的工具,我可以使用它来管道输出并将其转换为有效的JSON,因此jq可以处理,因为jq不支持它?

这个问题类似于Convert invalid json into valid json,除了我需要一个命令行实用程序而不是一些基于替换的php代码。

3 个答案:

答案 0 :(得分:4)

Hjson确实很好。

using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel;

答案 1 :(得分:2)

https://github.com/stedolan/jq/wiki/FAQ#processing-not-quite-valid-json上的jq FAQ列出了几个用于将near-JSON转换为JSON的工具(包括hjson)。其中一些可以用作bash命令,例如 https://www.npmjs.com/package/any-json,这是特别多才多艺。

顺便说一句,由于jq允许以灵活的方式在jq程序中指定JSON(例如,可以省略键名称周围的引号并且可以添加“#”注释),您可以使用jq本身来转换许多实例不是JSON到JSON。使用您的示例,如果不完整的JSON文本位于名为input.nqj的文件中,则调用:

$ jq -n -f input.nqj

会产生:

{
  "name": "Leo",
  "active": true
}

答案 2 :(得分:1)

由于我不知道部署Hjson是多么容易(来自Steve Bennett的回答),这里使用sed是一个更轻量级的替代方案:

$ sed 's/\b\([^:"]*\)\b\s*:/"\1":/g' <<EOF
> {
>   name: "Leo",
>   active: true
> }
> EOF
{
  "name": "Leo",
  "active": true
}

请注意,这更类似于您在问题中提供的示例:它只会修复密钥周围缺少的引号。此外,它可能过于激进,例如,整数键也会被引用。