Как я могу конвертировать JSON (из google-trend-api) в CSV?

Я пытался использовать javascript google-trend-api с npmjs.com для автоматизации поиска данных о тенденциях поиска. Мне удалось получить необработанный вывод JSON из моих запросов, но я не могу успешно разобрать их в форму - предпочтительно CSV или текст с разделителями табуляции - которую я могу импортировать в другое программное обеспечение (Stata) для анализа, Я попытался json2csv для анализа результатов, но это не возвращает ничего похожего на файл в виде таблицы.

Вот пример некоторых типичных результатов запроса (сокращенный по длине):

"{\" default \ ": {\" geoMapData \ ": [{\" geoCode \ ": \" 798 \ ", \" geoName \ ": \" Glendive MT \ ", \" value \ ": [100 ], \ "FormattedValue\":[\"100\"],\"maxValueIndex\":0,\"hasData\":[истинно]},{\"геокодировать \":\"552\",\"geoName\":\"Presque Isle ME\",\"value\":[49],\"formattedValue\":[\"49\"],\"maxValueIndex\":0,\"hasData\":[true]},{\"geoCode\":\"710\",\"geoName\":\"Hattiesburg-Laurel MS\",\"value\":[11],\"formattedValue\":[\"11\"],\"maxValueIndex\":0,\"hasData\":[true]},{\"geoCode\":\"766\",\"geoName\":\"Helena MT\"\ "значение \":[0],\"FormattedValue\":[\"\"],\"maxValueIndex\":0,\"hasData\":[ложь]}]}}"

После запуска json2csv -i "results.json" и сохранения выходных данных с помощью fs.outputJson я получаю ошибки, если я не уберу внешние кавычки и все обратные слэши. Но даже после этого я получаю следующее:

"default.geoMapData" "[{" "geoCode" ":" "798" "," "geoName" ":" "Glendive MT" "," "value" ": [100]," "formattedValue" ": [ "" 100 ""], ""maxValueIndex"":0, ""hasData"":[true]},{"" geoCode "": "552"",""geoName"":""Presque Isle ME"","" значение "":[49] "" FormattedValue"":[""49""] ""maxValueIndex"":0 ""hasData"":[истинно]}, { "" геокодировать "":""710"",""geoName"":""Hattiesburg-Laurel MS"",""value"":[11],""formattedValue"":[""11""],""maxValueIndex"":0,""hasData"":[true]},{""geoCode"":""766"",""geoName"":""Helena MT"",""value"":[0] "" FormattedValue"":[""""] ""maxValueIndex"":0 ""hasData"":[ложь]}]"

Я был бы признателен за любые рекомендации о том, как перевести вывод моего запроса в разумный CSV (или тому подобное). Я должен добавить, что я начинающий в этом деле, и извиниться, если ответ очевиден!

Эрик

1 ответ

Решение

Чтобы преобразовать данные JSON в CSV, вы можете использовать jq утилита командной строки.

Предоставив свои данные образца, вы можете сделать:

echo "{\"default\":{\"geoMapData\":[{\"geoCode\":\"798\",\"geoName\":\"Glendive MT\",\"value\":[100],\"formattedValue\":[\"100\"],\"maxValueIndex\":0,\"hasData\":[true]},{\"geoCode\":\"552\",\"geoName\":\"Presque Isle ME\",\"value\":[49],\"formattedValue\":[\"49\"],\"maxValueIndex\":0,\"hasData\":[true]},{\"geoCode\":\"710\",\"geoName\":\"Hattiesburg-Laurel MS\",\"value\":[11],\"formattedValue\":[\"11\"],\"maxValueIndex\":0,\"hasData\":[true]},{\"geoCode\":\"766\",\"geoName\":\"Helena MT\",\"value\":[0],\"formattedValue\":[\"\"],\"maxValueIndex\":0,\"hasData\":[false]}]}}" | \
jq -r '.default.geoMapData | map([.geoCode,.geoName,(.value[]|tostring),.formattedValue[],(.maxValueIndex|tostring),(.hasData[]|tostring)] | join(",")) | join("\n")'
798,Glendive MT,100,100,0,true
552,Presque Isle ME,49,49,0,true
710,Hattiesburg-Laurel MS,11,11,0,true
766,Helena MT,0,,0,false
Другие вопросы по тегам