Подтвердить что ты не робот

Используйте jq для разбора строки JSON

Я пытаюсь получить jq для анализа структуры JSON, например:

{
  "a" : 1,
  "b" : 2,
  "c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}

То есть, элемент в JSON - это строка с escaped json.

Итак, у меня есть что-то вроде $ jq [.c] myFile.json | jq [.id]

Но это сбой с jq: error: Cannot index string with string

Это потому, что вывод .c является строкой, а не более JSON. Как получить jq для синтаксического анализа этой строки?

Мое первоначальное решение - использовать sed, чтобы заменить все escape-символы (\":\", \",\" и \"), но это беспорядочно, я предполагаю, что для этого используется способ, встроенный в jq?

Спасибо!

изменить: Кроме того, доступна версия jq:

$ jq --version
jq version 1.3

Я думаю, я мог бы обновить его, если потребуется.

4b9b3361

Ответ 1

jq имеет fromjson, встроенный для этого:

jq '.c | fromjson | .id' myFile.json

fromjson был добавлен в версию 1.4.

Ответ 2

Вы можете использовать исходный вывод (-r), который будет содержать символы unescape:

jq -r .c myfile.json | jq .id

ДОПОЛНИТЕЛЬНО: это имеет то преимущество, что оно работает в jq 1.3 и выше; действительно, он должен работать в каждой версии jq с параметром -r.