有什么方法可以在单个命令中用jq解析此json?我想做这样的事情:jq .key.first
。但是,是的,考虑到key
是一个字符串,需要首先解析为json。
{
"key": "{\"first\":\"123\",\"second\":\"456\"}"
}
答案 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"
}
第二次jq
(jq .
)的调用对数据没有任何作用;它只是对它进行了很好的格式化(如上所述)并进行了着色(如果不输出到终端,则不会对输出进行着色)。
但是,它表明其输入是可以进一步处理的JSON(.key
的原始值)。例如,您可以使用jq .first
来获取"123"
(编码为JSON的字符串),或者使用jq -r .first
来获取123
(原始值)。