【问题标题】:parse error: Invalid numeric literal at line 1, column 2 (bash)解析错误:第 1 行第 2 列 (bash) 的数字文字无效
【发布时间】:2020-11-29 23:26:57
【问题描述】:

我在 bash 中使用 json,但我收到了这个解析错误:

parse error: Invalid numeric literal at line 1, column 2

这段代码有什么问题?

jsonStr=$(cat << EOF
'{"key1": "value1", "key2": "value2", "key3": "value3"}'
EOF
)
jsonStr=$(jq 'del(.key3)' <<<"$jsonStr")
STRING="hello"
jsonStr=$(jq '. + {'"$STRING"': "value4"}' <<<"$jsonStr")
echo $jsonStr

【问题讨论】:

标签: json bash syntax-error jq


【解决方案1】:

$(cat &lt;&lt; EOF ...) 构造将单引号作为数据的一部分传递,即:

$ jsonStr=$(cat << EOF
'{"key1": "value1", "key2": "value2", "key3": "value3"}' 
EOF
)
$ echo "${jsonStr}"
'{"key1": "value1", "key2": "value2", "key3": "value3"}'

注意前导/尾随单引号。

要克服解析错误,您需要去掉单引号,例如:

$ jsonStr=$(cat << EOF
{"key1": "value1", "key2": "value2", "key3": "value3"}
EOF
)

# or

$ jsonStr='{"key1": "value1", "key2": "value2", "key3": "value3"}'

以上都给了我们:

$ echo "${jsonStr}"
{"key1": "value1", "key2": "value2", "key3": "value3"}

现在jq/del 可以正常工作了:

$ jq 'del(.key3)' <<< "${jsonStr}"
{
  "key1": "value1",
  "key2": "value2"
}

然后+ 操作也有效:

$ STRING="hello"
$ jq 'del(.key3)' <<< "${jsonStr}"  | jq '. + {'"$STRING"': "value4"}'
{
  "key1": "value1",
  "key2": "value2",
  "hello": "value4"
}

综合起来:

jsonStr='{"key1": "value1", "key2": "value2", "key3": "value3"}'
jsonStr=$(jq 'del(.key3)' <<< "${jsonStr}")
STRING="hello"
jsonStr=$(jq '. + {'"${STRING}"': "value4"}' <<< "${jsonStr}")
echo "${jsonStr}"

生成:

{
  "key1": "value1",
  "key2": "value2",
  "hello": "value4"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多