【发布时间】:2014-03-06 02:19:08
【问题描述】:
我正在打开一个 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
【问题讨论】:
-
你能做一个最小的独立的正确例子吗?我们不知道
tmpfile是什么样子,我们不知道JSON_ARRAY 会发生什么,据我所知,CSV::Row#to_s将导致["a", "b", "c"],而不是a,b,c\n。除非你在某处使用CSV::Row#to_csv,我看不到,否则我不知道你是如何得到这个结果的。 -
@Amadan 我添加了更多细节,例如文件格式。同样来自
CSV::Row的rdoc,它说to_s是Alias for: to_csv -
我自己试过了,但我没有看到与您相同的行为。当我打印行中的最后一个字段时,其中没有换行符。
-
您是在 Windows 上运行它吗? CSV 库文档表明,如果文件未在 Windows 上以二进制模式打开,则可能会有些古怪。
-
@SomeGuy 我打印最后一个字段时也看不到它。我在 OSX 10.9 Ruby 2.1.1 上这样做