使用jq将字符串转换为JSON

86

背景

我有一个包含一个对象中的一串JSON字符串的JSON文件:

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

我需要使用json命令行解释器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个回答

140

使用 fromjson 命令。

它会将字符串解析为其相应的 JSON 值。而 tojson(和@json)则是反过来,将 JSON 值转换为字符串。

因此,你可以这样做:

.response.text | fromjson.title

31

你也可以这样做:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接