Поскольку значение поля "content" не может быть обработано напрямую с помощью fromjson
, следующее решение сначала переводит одинарные кавычки в экранированные двойные кавычки, а затем применяет ваш фильтр:
map(.final.content |= (gsub("'";"\"") | fromjson))
| .[]
| "\(.start),\(.final["name"]),\(.final["content"]["Type"])"
Вывод с использованием параметра командной строки -r:
xxx,uuu,text
yyy,nnn,null
CSV
Если вы хотите корректный вывод CSV, вероятно, было бы лучше использовать фильтр @csv
:
.[]
| .final.content |= (gsub("'";"\"") | fromjson)
| [.start, .final["name"], .final["content"]["Type"]]
| @csv
Вызов
При наличии в файле программы jq, например, program.jq, соответствующий вызов будет выглядеть следующим образом:
jq -r -f program.jq test.json
Вариация
Если вы хотите обрабатывать пропущенные значения специально, вы можете использовать //
, например, следующим образом:
(.final["content"]["Type"] // "NA")
Обработка встроенных двойных кавычек
.final.content |= (gsub("\"";"\\\"") | gsub("'";"\"") | fromjson)