我使用jq处理json str,但是shell不保留双引号。我无法添加转义字符,因为json str是从外部发送的。我想保留原始字符串的双引号。
动态生成json字符串,数据内容未定义,我不能使用sed
添加双引号
# The json_str is externally sent.
# Assume that the content is "{"name": "John", "age": 0}"
# I want get the name
echo "$json_str" | jq -r ".name"
我希望输出是“ John”,但实际输出是
parse error: Invalid literal at line 1, column 6
答案 0 :(得分:1)
您可以使用单引号
json_str='{"name", "John", "age": 22}'
或转义双引号
json_str="{\"name\", \"John\", \"age\": 22}"
答案 1 :(得分:1)
请注意,此答案适用于问题的原始版本。
我希望输出是“约翰”
除了测试用例所引入的错误之外,还存在使用选项-r
的问题:
· --raw-output / -r:
With this option, if the filter´s result is a string then it will
be written directly to standard output rather than being formatted
as a JSON string with quotes.
如果您不想输出彩色,则可以使用-M
来代替
· --colour-output / -C and --monochrome-output / -M:
By default, jq outputs colored JSON if writing to a terminal. You
can force it to produce color even if writing to a pipe or a file
using -C, and disable color with -M.
答案 2 :(得分:0)
JSON示例中的引号是JSON布局的一部分,而不是文件的内容。
当您想要报价时,可以使用
echo "${json_str}" | jq -r ".name" | sed 's/.*/"&"/'
或
name=$(echo "${json_str}" | jq -r ".name" | sed 's/.*/"&"/')