我有一个示例 json 响应,如下所示,我试图在 shell 脚本中使用 jq 进行解析。[{"id":1,"notes":"Demo1\nDemo2"}]
这是我试图通过它访问 shell 脚本中的注释的命令。
value=($(curl $URL | jq -r '.[].notes'))
当我回显“$value”时,我只得到 Demo1。如何获得确切的值: Demo1\nDemo2 ?
澄清一下,注释字段中没有反斜杠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=(..)
:
$ cat myscript2
data='[{"id":1,"notes":"Demo1\nDemo2"}]'
value=$(printf '%s' "$data" | jq -r '.[].notes')
echo "$value"
$ bash myscript2
Demo1
Demo2