【问题标题】:Parsing Multiple JSON Objects into a CSV using Ruby使用 Ruby 将多个 JSON 对象解析为 CSV
【发布时间】: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


【解决方案1】:
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

虽然考虑到格式更改这并不安全,所以我会添加一些验证

【讨论】:

    猜你喜欢
    • 2012-09-25
    • 2021-05-15
    • 2017-09-13
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多