我正在使用 API 从 NetFlow 分析器获取数据。我得到一个格式如下的 JSON 文件;
{"startTime":"2017-12-29 11:58","resultVector":[{"port":"*","app":"Unknown_App","dscpCode":"0","traffic":"4.77 MB","dscp":"Default","src":"20.xx.xx.2","dst":"10.xx.xx.1","dstport":"*","prot":"Unknown"}],"Type":"DestinationIN","devDetails":{"deviceID":"5000006","Total":"4.77 MB"},"TimeZone":"America/Chicago","endTime":"2018-01-05 11:58"}
我一直在尝试使用在github上找到的json2csv(https://github.com/jehiah/json2csv),并且确实成功地使用了不同的API和JSON输出格式。当我跑步时
json2csv -k port,app,dscpCode,traffic,dscp,src,dst,dstport,prot -i filein.json -o fileout2.csv
我得到一个 csv 文件,除了“,,,,,”之外什么都没有。我想要获取的是流量、源IP和目标IP。
跑步; json2csv -k 开始时间,结果向量 -i filein.json -o fileout2.csv 给我这个输出,虽然很接近,但它实际上不是 csv
2017-12-29 11:58,[map[dscpCode:0 src:20.xx.xx.2 dst:10.xx.xx.1 prot:Unknown port:* app:Unknown_App dstport:* traffic:4.77 MB dscp:Default]]
检查了一些报告这是有效 RFC 4627 JSON 的在线网站。还有其他人熟悉 json2csv,或者如果没有其他的话,我可以在脚本中使用另一个用于 Linux 的 cli 工具来进行转换?
这对于
jq
处理器来说是一项很好的工作:
jq -r '.resultVector[] | [.traffic, .src, .dst] | @csv' filein.json > fileout2.csv
最终
fileout2.csv
内容:
"4.77 MB","20.xx.xx.2","10.xx.xx.1"
如果有人感兴趣,我已经编写了另一个 CLI 工具用于从 JSON 到 CSV 的转换。
https://github.com/luca-vercelli/json2csv