通过命令行将JSON转换为CSV

3
我正在使用一个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 startTime,resultVector -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 的命令行工具可以在脚本中使用来进行转换?


好的,请展示一下最终期望的CSV输出应该是什么样子。 - RomanPerekhrest
3个回答

12

这是一个适合使用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"

非常感谢,这非常完美地解决了我的问题。我曾经试过使用jq,但没有正确设置输出格式".resultVector[] | [.traffic, .src, .dst]",所以我放弃了,并尝试使用json2csv,因为之前用它运气不错。我很感激这个。 - Sean W
@RomanPerekhrest 这个方法没有生成头部信息。你能否提供一个优雅的解决方案来生成头部信息呢? - jasonleonhard
@jasonleonhard,OP是否要求保留任何标题?原始问题中是否提到了“标题”? - RomanPerekhrest
@RomanPerekhrest,说得好,但在许多情况下,这是非常普遍和必要的。 - jasonleonhard

0
这是另一个用于将JSON转换为CSV的命令行工具。
https://github.com/luca-vercelli/json2csv

它能够解析嵌套的JSON数据。
这是带有OP数据的输出:
startTime,Type,devDetails-deviceID,devDetails-Total,TimeZone,endTime,resultVector-port,resultVector-app,resultVector-dscpCode,resultVector-traffic,resultVector-dscp,resultVector-src,resultVector-dst,resultVector-dstport,resultVector-prot
2017-12-29 11:58,DestinationIN,5000006,4.77 MB,America/Chicago,2018-01-05 11:58,*,Unknown_App,0,4.77 MB,Default,20.xx.xx.2,10.xx.xx.1,*,Unknown

-2

通常我也更喜欢使用cli工具

如果你想快速将一些JSON格式化为CSV,你也可以尝试一下这个:

https://json-csv.com/

提供文件上传和复制粘贴以快速获得结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接