Ruby CSV :: Row删除新行

时间:2014-03-06 02:19:09

标签: ruby csv

我正在打开一个CSV文件,然后将其转换为JSON。除了JSON数据在字符串中有\n个字符外,这一切都正常。就印刷它并尝试扼杀它而言,这些不是最后一个元素的一部分。当我打印row时,它确实有\n

require 'csv'
require 'json'
def csv_to_json (tmpfile)
    JSON_ARRAY = Array.new
    CSV.foreach(tmpfile) do |row|
        print row[row.length - 1]
        if row[row.length - 1].chomp! == nil
            print row
        end
        JSON_ARRAY.push(row)
     end
     return JSON_ARRAY.to_json
 end

JSON在返回时看起来像这样

["field11,field12\n",
 "field21,field22\n"]

如何删除这些换行符?

编辑: 这些是CSV::Row个对象,不支持chompstrip

等字符串操作

tmpfile的格式为

field11,field21
field21,field22

4 个答案:

答案 0 :(得分:2)

最简单的方法:

File.read(tmpfile).split("\n")

顺便说一下,如果要从字符串中删除换行符,可以使用String::strip方法。

CSV.foreach(tmpfile) do |row|
  # here row should be an array.
  p row
end

答案 1 :(得分:0)

CSV.foreach(tmpfile) do |row|
    print row[row.length - 1]
    if row[row.length - 1].chomp! == nil
        print row
    end
    row.map{|cell| cell.strip!}
    JSON_ARRAY.push(row)
 end

该行不支持剥离,但是单元格支持剥离。

答案 2 :(得分:0)

我能够在事后

使用map!让它工作
json_array.map! { |row| row = row.to_s.chomp! }

您也可以在循环内部执行to_s.chomp!。这对我来说不是一个选项,因为我需要常规对象在返回json之前进行一些计算

答案 3 :(得分:0)

不要Chomp。将row_sep设置为nil

JSON_ARRAY.push( row.to_s(row_sep: nil) )

# or

JSON_ARRAY.push( row.to_csv(row_sep: nil) )

正如评论所指出的,CSV::row#to_sCSV::row#to_csv的别名,它会在每行自动添加行分隔符。要解决此问题,您只需将row_sep设置为nil,并且不会在每行末尾添加\n

希望有所帮助。

JP