Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中将无效的json转换为有效的json_Json_Bash_Jq - Fatal编程技术网

在bash中将无效的json转换为有效的json

在bash中将无效的json转换为有效的json,json,bash,jq,Json,Bash,Jq,我从脚本中获取了无效的JSON,例如 { name: "Leo", active: true } 如果jq不支持,有没有一个bash安装工具可以用来引导输出并将其转换为有效的JSON,这样jq就可以对其进行处理 这个问题类似于,只是我需要一个命令行实用程序,而不是一些基于替换的php代码。这类事情做得非常好 $ hjson -j <<EOF > { > name: "Leo", > active: true > } > EOF {

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

{
  name: "Leo",
  active: true
}
如果jq不支持,有没有一个bash安装工具可以用来引导输出并将其转换为有效的JSON,这样jq就可以对其进行处理

这个问题类似于,只是我需要一个命令行实用程序,而不是一些基于替换的php代码。

这类事情做得非常好

$ hjson -j <<EOF
> {
>   name: "Leo",
>   active: true
> }
> EOF
{
  "name": "Leo",
  "active": true
}
$hjson-j名字:“狮子座”,
>主动:正确
> }
>EOF
{
“姓名”:“狮子座”,
“活动”:真
}

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

$ sed 's/\b\([^:"]*\)\b\s*:/"\1":/g' <<EOF
> {
>   name: "Leo",
>   active: true
> }
> EOF
{
  "name": "Leo",
  "active": true
}
$sed's/\b\([^:“]*\)\b\s*:/“\1”:/g'name:“Leo”,
>主动:正确
> }
>EOF
{
“姓名”:“狮子座”,
“活动”:真
}
请注意,这对于您在问题中提供的示例更为具体:它只会修复键周围缺少的引号。此外,这可能过于激进,例如,整数键也会被引用。

jq常见问题解答列出了几种工具(包括hjson)用于将近JSON转换为JSON。其中一些可以用作bash命令,例如。 ,它的用途特别广泛

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

$ jq -n -f input.nqj
将产生:

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

你更快了:)我有sed的/([:alpha:][]*):/“\1:/”正是我想要的。我将使用python版本
pip3安装hjson&&cli53列表| python-m hjson.tool-j
谢谢!!!