在 jq 中将字符串转换为 json

背景资料

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

61020 次浏览

使用 fromjson

它将字符串解析为适当的 json 值。tojson(和 @json)则相反,它接受一个 json 值并将其转换为一个字符串。

所以你可以这样做:

.response.text | fromjson.title

你也可以这样做:

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