我正在尝试运行以下命令从文件中读取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
无法弄清楚造成这个问题的原因。
感谢您的帮助:)
答案 0 :(得分:2)
这不是jq
问题,而是引用问题(错误中突出显示)。
更改--arg
选项,使其值为双引号:
arg='{"test":"hello world"}'
jq -n -r --arg m "$arg" '$m | fromjson | {records:[{value:.}]}'
答案 1 :(得分:1)
您遇到了shell问题:$(<$1)
周围缺少引号。暗示是空间有所不同。
顺便说一句,当有多个移动部件时(就像这里一样),在使用stackoverflow之前尝试隔离问题是明智的。这样,你经常会自己解决问题;如果没有,它至少会让其他人更容易专注于真正(并且希望有趣)的问题。