【发布时间】:2016-08-08 20:58:46
【问题描述】:
我目前正在处理一个 .txt 文件,该文件包含来自 API 调用的多个 JSON 对象。我正在寻找一种将所有这些对象解析为 .csv 文件的方法。过去,我能够将一个 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 部分。
【问题讨论】:
-
现在的输出是什么?似乎您需要解开值。尝试做hash.values.flatten,hash也应该是一个数组,所以也需要把value取出来。
-
您有一个包含多个 JSON 文档的文件。如果与示例数据一样,您的文件的每一行都有一个 JSON 文档,则不要使用
read,而是使用foreach并分别处理每一行。如果您是 JSON 的作者,那么您应该修复输出,以便它生成正确的 JSON,该 JSON 应该是单个哈希数组(当然以 JSON 编码)。解析完一行后,根据需要将其传递给 CSV。 -
@IvanYouroff 到目前为止,我使用的代码可以成功地从一个 JSON 对象生成一个 CSV 文件。
-
@theTinMan 谢谢,我会尝试使用该解决方案。
标签: json ruby csv parsing object