[英]Ruby CSV::Row remove new line
我正在打開一個 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
row_sep
設置為nil
。JSON_ARRAY.push( row.to_s( row_sep: nil ) )
或者
JSON_ARRAY.push( row.to_csv( row_sep: nil ) )
正如評論指出的那樣, CSV::row#to_s
是CSV::row#to_csv
的別名,它自動在每行后面添加一個行分隔符。 要解決此問題,您只需將row_sep
設置為nil
,它就不會在每行的末尾添加\\n
。
希望有幫助。
最簡單的方法:
File.read(tmpfile).split("\n")
順便說一下,如果你想從字符串中刪除換行符,你可以使用String::strip
方法。
CSV.foreach(tmpfile) do |row|
# here row should be an array.
p row
end
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
該行不支持剝離,但單元格支持。
我能夠使用map!
讓它工作map!
事后
json_array.map! { |row| row = row.to_s.chomp! }
你也可以做to_s.chomp!
循環內部。 這對我來說不是一個選擇,因為我需要常規對象在返回 json 之前進行一些計算
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.