使用jq提取对shell变量的json响应

使用jq提取对shell变量的json响应,json,bash,shell,jq,Json,Bash,Shell,Jq,我有一个示例json响应,如下所示,我正在尝试使用shell脚本中的jq进行解析。[{“id”:1,“notes”:“Demo1\nDemo2”}] 这是我试图访问shell脚本中注释的命令 value=($(curl $URL | jq -r '.[].notes')) 当我回显“$value”时,我只得到Demo1。如何获取准确值:Demo1\nDemo2?为了澄清,notes字段中没有反斜杠或n\n是JSON对文本换行的编码方式,因此您应该期望的值是: Demo1 Demo2 您看到

我有一个示例json响应,如下所示,我正在尝试使用shell脚本中的jq进行解析。
[{“id”:1,“notes”:“Demo1\nDemo2”}]

这是我试图访问shell脚本中注释的命令

value=($(curl $URL | jq -r '.[].notes')) 

当我回显“$value”时,我只得到Demo1。如何获取准确值:Demo1\nDemo2?

为了澄清,notes字段中没有反斜杠或
n
\n
是JSON对文本换行的编码方式,因此您应该期望的值是:

Demo1
Demo2
您看到的问题是,您已将值拆分为空白并创建了一个数组。每个值都可以通过索引访问:

$ cat myscript
data='[{"id":1,"notes":"Demo1\nDemo2"}]'
value=($(printf '%s' "$data" | jq -r '.[].notes'))
echo "The first value was ${value[0]} and the second ${value[1]}"

$ bash myscript
The first value was Demo1 and the second Demo2
要将其作为简单字符串获取,请从
value=(…)
中删除paren:

如果您确实想读入数组,如果目标是bash 4.0,则使用
readarray
mapfile
,或
IFS=$'\n'read-r-d'-a值时使用的错误更少<
$ cat myscript2
data='[{"id":1,"notes":"Demo1\nDemo2"}]'
value=$(printf '%s' "$data" | jq -r '.[].notes')
echo "$value"

$ bash myscript2
Demo1
Demo2