Regex/Gsub 删除所有嵌套的双引号,而不仅仅是外部的
Regex/Gsub removing all nested double quotes instead of just the outer ones
我想将以下 CSV 文件导入 rails 数据库:
"[{""id"":""actions"",""name"":""app"",""description""}]"
导入后,我总是得到:
"{\"id\":\"actions\",\"name\":\"app\",\"description\"]}"
我希望导入看起来像这样:
[{"id":,"actions":,"name":,"description",...}]"
我尝试使用 .gsub!(/"/,'')
但是这个 returns:
"[{id:actions,name:actions,description:}]"
The issue is that all the quote marks have been removed so its just id
insted of "id"
我的代码是:
def import_app_version
path = Rails.root.join('db', 'csv_export', 'app_versions.csv')
counter = 0
puts "Inserts on table app_versions started..."
CSV.foreach(path, headers: true) do |row|
next if row.to_hash['modules'] == nil
row.to_hash['modules'].gsub!(/"/,'')
next if row.to_hash['deleted_at'] != nil
counter += 1
AppVersion.skip_callbacks = true
AppVersion.create!(row.to_hash)
end
AppVersion.skip_callbacks = false
puts "#{counter} inserts on table app_versions complete"
end
执行此操作的正确方法是什么才能使导入工作正常并按预期导入数据?
我找了半天,找到了很多答案,但他们最终都删除了上面显示的所有双引号。
如果有人知道如何以正确的方式导入包含 JSON 内容的 csv,那就更好了。
不要使用替换,也不要尝试手动删除引号。
"[{""id"":""actions"",""name"":""app"",""description""}]"
如果您使用 csv parser/reader(可能带有参数 'quoted fields')读取上述数据,应该没问题。
周围的引号将被删除,内部引号将不转义为一个双引号。
我想将以下 CSV 文件导入 rails 数据库:
"[{""id"":""actions"",""name"":""app"",""description""}]"
导入后,我总是得到:
"{\"id\":\"actions\",\"name\":\"app\",\"description\"]}"
我希望导入看起来像这样:
[{"id":,"actions":,"name":,"description",...}]"
我尝试使用 .gsub!(/"/,'')
但是这个 returns:
"[{id:actions,name:actions,description:}]"
The issue is that all the quote marks have been removed so its just
id
insted of"id"
我的代码是:
def import_app_version
path = Rails.root.join('db', 'csv_export', 'app_versions.csv')
counter = 0
puts "Inserts on table app_versions started..."
CSV.foreach(path, headers: true) do |row|
next if row.to_hash['modules'] == nil
row.to_hash['modules'].gsub!(/"/,'')
next if row.to_hash['deleted_at'] != nil
counter += 1
AppVersion.skip_callbacks = true
AppVersion.create!(row.to_hash)
end
AppVersion.skip_callbacks = false
puts "#{counter} inserts on table app_versions complete"
end
执行此操作的正确方法是什么才能使导入工作正常并按预期导入数据?
我找了半天,找到了很多答案,但他们最终都删除了上面显示的所有双引号。
如果有人知道如何以正确的方式导入包含 JSON 内容的 csv,那就更好了。
不要使用替换,也不要尝试手动删除引号。
"[{""id"":""actions"",""name"":""app"",""description""}]"
如果您使用 csv parser/reader(可能带有参数 'quoted fields')读取上述数据,应该没问题。
周围的引号将被删除,内部引号将不转义为一个双引号。