【问题标题】:CSV to JSON with line breaks with RubyCSV 到 JSON,带有 Ruby 的换行符
【发布时间】:2021-02-25 22:33:40
【问题描述】:

我试图在 Ruby 中将 CSV 转换为 JSON 时保留换行符。 我有一个看起来像这样的 csv:

EMAIL, VALUE
some_email@email.com, value1
another_email@email.com, value2 
yet_another_email@email.com, value3
...

我需要将其解析为 JSON,但保留行结构,使其最终形成一个 .json 文件,如下所示 - 必须有换行符:

{"EMAIL":"some_email@email.com","vars":{"VALUE":"val1"}}
{"EMAIL":"another_email@email.com","vars":{"VALUE":"val2"}}
{"EMAIL":"yet_another_email@email.com","vars":{"VALUE":"val3"}}

这是我目前的 Ruby 代码:

temp_json = Tempfile.new

File.open("#{temp_json.path}","w") do |f|
   CSV.foreach('test.csv', headers: :first_row, liberal_parsing: true ).each do |row|
      data = {
        EMAIL: => row.fields[0], 
        vars: => {
          VALUE: => row.fields[1]
        }
      }
      f.write(data.to_json)
    end
  end

但是,这只是创建了一个文件,其中每个元素都在一行中,没有换行符,如下所示: {"EMAIL":"some_email@email.com","vars":{"VALUE":"val1"}}{"EMAIL":"another_email@email.com","vars":{"VALUE":" val2"}}{"EMAIL":"yet_another_email@email.com","vars":{"VALUE":"val3"}}

有谁知道实现这一点的方法吗? 谢谢!

【问题讨论】:

  • 您是否在寻找JSON.pretty_generate(x) 而不是x.to_json

标签: json ruby csv


【解决方案1】:

如果你想要 JSON,那么换行无关紧要,但你应该输出一个数组:

temp_json = Tempfile.new

File.open("#{temp_json.path}","w") do |f|
  # note, map instead of each 
  f.write CSV.foreach("test.csv", headers: :first_row, liberal_parsing: true).map do |row|
    data = {
      EMAIL: row.fields[0], 
      vars: {
        VALUE: row.fields[1]
      }
    }
  end.to_json
end

数组对于非常长的文件会很糟糕,因为整个文件必须保存在内存中,然后格式化为 JSON。对于较长的文件或出于某种原因您真的需要换行符,还有另一种格式称为JSONlines,它更接近 CSV。你可以这样写:

temp_json = Tempfile.new

File.open("#{temp_json.path}","w") do |f|
  CSV.foreach("test.csv", headers: :first_row, liberal_parsing: true ).each do |row|
    data = {
      EMAIL: row.fields[0], 
      vars: {
        VALUE: row.fields[1]
      }
    }
    f.puts(data.to_json)
  end
end

【讨论】:

  • 这是我们使用的 API 的一个怪癖。我会试一试。谢谢!
猜你喜欢
  • 2021-12-16
  • 1970-01-01
  • 2014-07-01
  • 2013-05-06
  • 2021-12-27
  • 1970-01-01
  • 2013-09-02
  • 2018-02-23
相关资源
最近更新 更多