Преобразование строки в json в jq
Задний план
У меня есть json файл, содержащий строку json внутри объекта:
{
"requestType": "POST",
"response": {
"size": 78,
"text": "{\"recordID\":123, \"title\":\"Hello World\", \"content\":\"Lorem ipsum...\"}"
}
}
Мне нужно .response.text
строки .response.text
как json, используя jper.
Когда я запускаю эту команду:
jq '.response.text | @json'
Вывод: "\"{\\\"recordID\\\":123, \\\"title\\\":\\\"Hello World\\\", \\\"content\\\":\\\"Lorem ipsum...\\\"}\""
Я получаю какую-то странную escape-строку json вместо json, к которой я могу получить доступ через что-то вроде этого: .response.text | @json |.recordID
.response.text | @json |.recordID
.response.text | @json |.recordID
.
Я понимаю, что функция @json
будет принимать json и выводить строку с экранированной json, поэтому должен быть другой способ, но @text
ничего не делает.
Вопрос
Есть ли способ преобразовать строку escaped json в фактический json, который я могу проанализировать с помощью такой команды: jq '.response.text | @json |.title'
jq '.response.text | @json |.title'
jq '.response.text | @json |.title'
и получить этот вывод: "Hello World"
?
Ответы
Ответ 1
Используйте fromjson
.
Он анализирует строку json на соответствующее значение json. tojson
(и @json
) идет наоборот и принимает значение json и преобразует его в строку json.
Таким образом, вы можете сделать это:
.response.text | fromjson.title