如何使用json数据格式化csv文件?

我有一个json文件,我需要转换为一个csv文件,但我有点担心信任json-to-csv转换器网站,因为输出的数据似乎是不正确的…所以我希望得到一些帮助这里!

我有以下json文件结构:

{ "GroupName": "GrpName13", "Number": 3, "Notes": "Test Group ", "Units": [ { "UnitNumber": "TestUnit13", "DataSource": "Factory", "ContractNumber": "TestContract13", "CarNumber": "2", "ControllerTypeMessageId" : 4, "NumberOfLandings": 4, "CreatedBy": "user1", "CommissionModeMessageId": 2, "Details": [ { "DetailName": "TestFloor13", "DetailNumber": "5" } ], "UnitDevices": [ { "DeviceTypeMessageId": 1, "CreatedBy": "user1" } ] } ] } 

我想我看到的问题是,转换器似乎无法理解许多嵌套的数据值。 而我认为转换器是错误的原因是因为当我尝试使用它们转换回json,我没有收到相同的结构。

有谁知道如何手动格式化这个JSON到CSV格式,或知道一个可以处理嵌套值的可靠转换器?

尝试

http://www.json-buddy.com/convert-json-csv-xml.htm

如果不适合你,那么你可以尝试这个工具

http://download.cnet.com/JSON-to-CSV/3000-2383_4-76680683.html

应该是有帮助的!

我已经试过你的JSON在这个url:

http://www.convertcsv.com/json-to-csv.htm

因此:UnitNumber,DataSource,ContractNumber,CarNumber,ControllerTypeMessageId,NumberOfLandings,CreatedBy,CommissionModeMessageId,Details / 0 / DetailName,Details / 0 / DetailNumber,UnitDevices / 0 / DeviceTypeMessageId,UnitDevices / 0 / CreatedBy TestUnit13,Factory,TestContract13,2 ,4,4,user1,2,TestFloor13,5,1,USER1

因为它可以保存密钥的path,比如列表“UnitDevices”中的“DeviceTypeMessageId”:它将使用“UnitDevices / 0 / DeviceTypeMessageId”命名列名,这样可以避免同名错误,所以你可以得到列名称由其转换器规则。

希望有帮助。

这是一个使用jq的解决scheme

如果文件filter.jq包含

 def denormalize: def headers($p): keys_unsorted[] as $k | if .[$k]|type == "array" then (.[$k]|first|headers("\($p)\($k)_")) else "\($p)\($k)" end ; def setup: [ keys_unsorted[] as $k | if .[$k]|type == "array" then [ .[$k][]| setup ] else .[$k] end ] ; def iter: if length == 0 then [] elif .[0]|type != "array" then [.[0]] + (.[1:] | iter) else (.[0][] | iter) as $x | (.[1:] | iter) as $y | [$x[]] + $y end ; [ headers("") ], (setup | iter) ; denormalize | @csv 

data.json包含(注意额外的样本添加)

 { "GroupName": "GrpName13", "Notes": "Test Group ", "Number": 3, "Units": [ { "CarNumber": "2", "CommissionModeMessageId": 2, "ContractNumber": "TestContract13", "ControllerTypeMessageId": 4, "CreatedBy": "user1", "DataSource": "Factory", "Details": [ { "DetailName": "TestFloor13", "DetailNumber": "5" } ], "NumberOfLandings": 4, "UnitDevices": [ { "CreatedBy": "user1", "DeviceTypeMessageId": 1 }, { "CreatedBy": "user10", "DeviceTypeMessageId": 10 } ], "UnitNumber": "TestUnit13" }, { "CarNumber": "99", "CommissionModeMessageId": 99, "ContractNumber": "Contract99", "ControllerTypeMessageId": 99, "CreatedBy": "user99", "DataSource": "Another Factory", "Details": [ { "DetailName": "TestFloor99", "DetailNumber": "99" } ], "NumberOfLandings": 99, "UnitDevices": [ { "CreatedBy": "user99", "DeviceTypeMessageId": 99 } ], "UnitNumber": "Unit99" } ] } 

那么命令

 jq -M -r -f filter.jq data.json 

会产生

 "GroupName","Notes","Number","Units_CarNumber","Units_CommissionModeMessageId","Units_ContractNumber","Units_ControllerTypeMessageId","Units_CreatedBy","Units_DataSource","Units_Details_DetailName","Units_Details_DetailNumber","Units_NumberOfLandings","Units_UnitDevices_CreatedBy","Units_UnitDevices_DeviceTypeMessageId","Units_UnitNumber" "GrpName13","Test Group ",3,"2",2,"TestContract13",4,"user1","Factory","TestFloor13","5",4,"user1",1,"TestUnit13" "GrpName13","Test Group ",3,"2",2,"TestContract13",4,"user1","Factory","TestFloor13","5",4,"user10",10,"TestUnit13" "GrpName13","Test Group ",3,"99",99,"Contract99",99,"user99","Another Factory","TestFloor99","99",99,"user99",99,"Unit99"