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

时间:2018-06-09 03:28:07

标签: json bash shell jq

我有一个示例json响应,如下所示,我试图在shell脚本中使用jq进行解析。"select sum(service.price) as sum_price from (reservations inner join service on reservation.Res_ser_D = service.Ser_ID inner join personnel on reservation.Res_per_ID = personnel.Per_ID ) where reservation.Res_cus_ID = '$userID'"

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

[{"id":1,"notes":"Demo1\nDemo2"}]

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

1 个答案:

答案 0 :(得分:1)

为了澄清,注释字段中没有反斜杠或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=(..)

中删除parens
$ cat myscript2
data='[{"id":1,"notes":"Demo1\nDemo2"}]'
value=$(printf '%s' "$data" | jq -r '.[].notes')
echo "$value"

$ bash myscript2
Demo1
Demo2