jq没有使用空格

时间:2017-12-12 14:51:53

标签: json bash shell jq

我正在尝试运行以下命令从文件中读取JSON并使用jq格式化它:

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

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

{
  "records": [
    {
       "value": {
        "test": "helloworld"
      }
     }
  ]
}

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

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

无法弄清楚造成这个问题的原因。

感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

这不是jq问题,而是引用问题(错误中突出显示)。

更改--arg选项,使其值为双引号:

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

答案 1 :(得分:1)

您遇到了shell问题:$(<$1)周围缺少引号。暗示是空间有所不同。

顺便说一句,当有多个移动部件时(就像这里一样),在使用stackoverflow之前尝试隔离问题是明智的。这样,你经常会自己解决问题;如果没有,它至少会让其他人更容易专注于真正(并且希望有趣)的问题。