Преобразовать строку в json в jq

Фон

У меня есть файл json, который содержит строку json внутри объекта:

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

Мне нужно интерпретировать содержимое строки .response.text как json, используя интерпретатор командной строки json, jq.

Когда я запускаю эту команду:

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"?


person RJ-Adam    schedule 17.12.2015    source источник


Ответы (2)


Используйте fromjson.

Он анализирует строку на соответствующее значение json. tojson@json) идет наоборот и принимает значение json и преобразует его в строку.

Итак, вы можете сделать это:

.response.text | fromjson.title
person Jeff Mercado    schedule 17.12.2015
comment
Большое спасибо! Я полностью пропустил этот раздел в документации! - person RJ-Adam; 17.12.2015

Вы также можете сделать это:

jq -r '.response.text' | jq '.recordID'
person S P Arif Sahari Wibowo    schedule 28.10.2019