关于bash:jq没有用空格解析json

jq not parsing json with spaces

本问题已经有最佳答案,请猛点这里访问。

我尝试运行以下命令,从文件中读取JSON并用JQ格式化它:

1
jq -n -r --arg m $(<$1) '$m | fromjson | {records:[{value:.}]}'

当输入json不包含空格时,它会生成所需的输出,如{"test":"helloworld"}

1
2
3
4
5
6
7
8
9
{
 "records": [
    {
      "value": {
       "test":"helloworld"
      }
     }
  ]
}

但是,对于像{"test":"hello world"}这样的输入,它会给出以下错误:

1
2
3
jq: error: syntax error, unexpected QQSTRING_START, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
world"}    
jq: 1 compile error

不知道是什么导致了这个问题。

感谢您的帮助:)


这不是一个jq问题,而是一个引用问题(如错误中所强调的)。

--arg选项更改为双引号内的值:

1
2
arg='{"test":"hello world"}'
jq -n -r --arg m"$arg" '$m | fromjson | {records:[{value:.}]}'


您遇到了一个shell问题:在$(<$1)周围缺少引号。提示是空间会产生不同。

顺便说一下,当有多个移动部件(如这里所示)时,最好在诉诸stackoverflow之前隔离问题。这样的话,你通常会自己解决问题;如果不是这样,至少会让其他人更容易关注真正的(并且希望是有趣的)问题。