在jq中将字符串转换为json

时间:2015-12-17 17:18:51

标签: json command-line jq

背景

我有一个json文件,在对象中包含一个json字符串:

{
    "requestType": "POST",
    "response": {
        "size": 78,
        "text": "{\"recordID\":123, \"title\":\"Hello World\", \"content\":\"Lorem ipsum...\"}"
    }
}

我需要使用json命令行interpereter jq.response.text字符串的内容作为json插入。

当我运行此命令时:

jq '.response.text | @json'

输出:"\"{\\\"recordID\\\":123, \\\"title\\\":\\\"Hello World\\\", \\\"content\\\":\\\"Lorem ipsum...\\\"}\""

我得到了一些奇怪的转义json字符串而不是json,我可以通过以下内容访问:.response.text | @json | .recordID

我意识到@json函数会接受json并输出一个json转义字符串,所以必须有另一种方法,但@text似乎没有做任何事情。

问题

是否有某种方法可以将转义的json字符串转换为实际的json,我可以使用以下命令进行解析:jq '.response.text | @json | .title'并获取此输出:"Hello World"

2 个答案:

答案 0 :(得分:33)

使用fromjson

它将字符串解析为适当的json值。 tojson(和@json)反过来采用json值并将其转换为字符串。

所以你可以这样做:

.response.text | fromjson.title

答案 1 :(得分:2)

您也可以这样做:

jq -r '.response.text' | jq '.recordID'