在 jq 中将字符串转换为 json

Convert string to json in jq

背景

我有一个 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"?

使用fromjson.

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

所以你可以这样做:

.response.text | fromjson.title

您也可以这样做:

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