Как я могу конвертировать JSON (из google-trend-api) в CSV? - PullRequest
0 голосов
/ 03 октября 2018

Я пытался использовать 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 \": [ложь]}]}}" * 1 006 *

При запуске 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" "," "value" ": [49]," "formattedValue" ": [" "49" "],""maxValueIndex" ": 0," "hasData" ": [true]}, {" "geoCode" ":" "710" "," "geoName" ":" "Hattiesburg-Laurel MS" "," "value"": [11]", "FormattedValue" ": [" "11" "]", "maxValueIndex" ": 0", "hasData" ": [истинно]}, {" "геокодировать" ":" "766""," "geoName" ":" "Helena MT" "," "value" ": [0]," "formattedValue" ": [" "" "]," "maxValueIndex" ": 0," "hasData"": [false]}]"

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

Эрик

1 Ответ

0 голосов
/ 03 октября 2018

Чтобы преобразовать данные 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
...