如何使用jq解析json中编码为字符串的json

时间:2020-10-05 10:37:48

标签: json jq

有什么方法可以在单个命令中用jq解析此json?我想做这样的事情:jq .key.first。但是,是的,考虑到key是一个字符串,需要首先解析为json。

{
  "key": "{\"first\":\"123\",\"second\":\"456\"}"
}

2 个答案:

答案 0 :(得分:2)

使用fromjson,例如

jq '.key|fromjson|.first'

正如评论中指出的那样,可以通过省略最后一个竖线字符来缩写。

通常,最好在一次通话就足够的情况下避免两次调用jq。

答案 1 :(得分:0)

有什么方法可以在单个命令中用jq解析此json?

这取决于您如何定义单个命令。可以使用包含两个jq调用的管道来完成此操作:

INPUT='{
  "key": "{\"first\":\"123\",\"second\":\"456\"}"
}'

echo "$INPUT" | jq -r .key | jq .

jq -r .key告诉jq回显.key的原始值,而不是其JSON表示(它是一个字符串,通常jq会按照它在输入JSON)。

输出为:

{
  "first": "123",
  "second": "456"
}

第二次jqjq .)的调用对数据没有任何作用;它只是对它进行了很好的格式化(如上所述)并进行了着色(如果不输出到终端,则不会对输出进行着色)。

但是,它表明其输入是可以进一步处理的JSON(.key的原始值)。例如,您可以使用jq .first来获取"123"(编码为JSON的字符串),或者使用jq -r .first来获取123(原始值)。