【问题标题】:Regex/Gsub removing all nested double quotes instead of just the outer ones正则表达式/Gsub 删除所有嵌套的双引号,而不仅仅是外部的
【发布时间】:2021-12-22 08:16:52
【问题描述】:

我想将以下 CSV 导入到 rails db:

"[{""id"":""actions"",""name"":""app"",""description""}]"

导入后,我总是得到:

"{\"id\":\"actions\",\"name\":\"app\",\"description\"]}"

我希望导入看起来像这样:

[{"id":,"actions":,"name":,"description",...}]"

我尝试使用 .gsub!(/"/,'') 但这会返回:

"[{id:actions,name:actions,description:}]"

问题是所有引号都被删除了,所以它只是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 的方法,那就更好了。

【问题讨论】:

  • 我不确定您的意图是什么,但您显示的数据非常不一致,并且在任何时候都不能代表有效的对象。例如第一个字符串显示了一个带有无效哈希的数组;第二个字符串显示了一个无效的哈希,其中包含错误的右括号“]”;第三无论它是什么都显示了一个带有无效哈希的数组,中间有一个错误的冒号,末尾有一个错误的双引号,而且它在途中的某个地方丢失了“app”字符串。基本上没有任何转换是有意义的。请修正问题和输出。

标签: json ruby csv gsub


【解决方案1】:

不要使用替换,也不要尝试手动删除引号。

"[{""id"":""actions"",""name"":""app"",""description""}]"

如果您使用 csv 解析器/读取器(可能带有参数“引用字段”)读取上述数据,一切都应该没问题。

周围的引号将被删除,内部引号将被转义为一个双引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多