2016-08-08 55 views
0

我目前正在使用包含API調用中的多個JSON對象的.txt文件。我正在尋找一種方法將所有這些對象解析爲.csv文件。在過去,我已經能夠將一個JSON對象變成一個.csv文件,但我不確定如何做到這一點。使用Ruby將多個JSON對象解析爲CSV文件

樣品JSON:

[{"field1":["value1"], "field2": ["value2"]}] 
[{"field1":["value1"], "field2": ["value2"]}] 
[{"field1":["value1"], "field2": ["value2"]}] 

我目前使用推JSON到CSV的代碼如下,儘管它似乎只是一個JSON對象上工作。我相信我需要的是某種循環,它會推動每個對象通過,然後再次循環。

require 'csv' 
require 'json' 

CSV.open("sample.csv", "w") do |csv| 
csv << ["field1", 
"field2" 
] 
    JSON.parse(File.open("json.txt").read).each do |hash| #open json to parse 

    csv << hash.values 

    end 
end 

任何人都可以給我任何建議嗎?我已經找到了多個對象解析的解決方案,但沒有一個能夠幫助我實現CSV部分。

+0

什麼是輸出的權利嗎?似乎你需要展開價值觀。嘗試做hash.values.flatten,哈希也應該是一個數組,所以你也需要取出這個值。 –

+0

您有一個包含多個JSON文檔的文件。如果像在示例數據中一樣,文件的每行上都有一個JSON文檔,那麼不用'read',而是使用'foreach'並分別處理每行。如果您是JSON的作者,那麼您應該修正輸出,以便生成適當的JSON,該JSON應該是單個哈希數組(當然,使用JSON編碼)。一旦你解析了一行,然後根據需要將它傳遞給CSV。 –

+0

@IvanYouroff截至目前,我使用的代碼可以從一個JSON對象成功生成一個CSV文件。 –

回答

0
require 'csv' 
require 'json' 

CSV.open("sample.csv", "w") do |csv| 
    csv << ["field1", "field2"] 
    File.open("json.txt").each do |line| 
    csv << JSON.parse(line).first.values.flatten 
    end 
end 

雖然這不是真正安全考慮格式的變化,所以我想補充一些驗證