如何将JSON(从google-trends-api)转换为CSV?

时间:2018-10-02 22:11:08

标签: javascript json parsing google-trends json2csv

我一直在尝试使用npmjs.com上的javascript google-trends-api自动检索搜索趋势数据。我已经成功地从查询中获取了原始JSON输出,但是我似乎无法成功地将它们解析成一种表格-最好是CSV或制表符分隔的文本-我可以将其导入其他软件(Stata)中进行分析。我尝试使用json2csv解析结果,但这不会返回类似于电子表格样式的文件。

这是一些代表性查询结果的示例(省略了长度):

  

“ {\”默认\“:{\” 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]}]}}}”

运行 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”“:[true]},{”“ geoCode”“:”“ 766”“,”“ geoName”“:”“ Helena MT”“,”“ value”“:[0],”“ formattedValue“”:[“”“”],“” maxValueIndex“”:0“,”“ hasData”“:[false]}]”

对于将查询输出转换为明智的CSV(或类似格式)的任何指导,我将不胜感激。我要补充一点,我是这方面的初学者,如果答案很明显,我就道歉!

埃里克

1 个答案:

答案 0 :(得分:0)

要将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