我正在打开一个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
个对象,不支持chomp
或strip
tmpfile
的格式为
field11,field21
field21,field22
答案 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)
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_s
是CSV::row#to_csv
的别名,它会在每行自动添加行分隔符。要解决此问题,您只需将row_sep
设置为nil
,并且不会在每行末尾添加\n
。
希望有所帮助。
JP