【问题标题】:Rails with mysql can't save json datatype带有mysql的Rails无法保存json数据类型
【发布时间】:2016-12-29 06:21:09
【问题描述】:

我创建了带有 mysql(5.7.16) 后端的 Rails(3.2) 应用程序。我无法保存 json 数据,我有如下传递值,它显示错误,如

ActiveRecord::StatementInvalid - Mysql2::Error: 无效的 JSON 文本:“无效值。”在“shopping_cart_item_special_infos.special_info”列值的第 1 位。:插入shopping_cart_item_special_infoscreated_atshopping_cart_checkout_option_idspecial_infoupdated_at)值('2016-12-29 06:08:52' , 141, '--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\n\'201\': text1\n\'209\': \'623\'\n\'210\': \'625\ '\n\'211\': text2\n', '2016-12-29 06:08:52'): activerecord (3.2.21) lib/active_record/connection_adapters/abstract_adapter.rb:285:in rescue in log' activerecord (3.2.21) lib/active_record/connection_adapters/abstract_adapter.rb:280:inlog' newrelic_rpm (3.9.1.236) lib/new_relic/agent/instrumentation/active_record.rb:63:in `block in log_with_newrelic_i

{"201"=>"text1", "209"=>"623", "210"=>"625", "211"=>"text2"}

这里出了什么问题?

【问题讨论】:

  • 在文本而非图像中添加错误消息
  • Deepak:我已经编辑了问题
  • 这是你的确切 json 吗?你要存储哪个?
  • @Amruth:是的。我要存储上面的json。
  • @anandh 检查你的 json jsonlint.com 我认为它无效

标签: mysql ruby-on-rails json


【解决方案1】:

你的 JSON 应该是这样的

{"201":"text1", "209":"623", "210":"625", "211":"text2"}

但是你传递了一个 ruby​​ 哈希

检查=>:之间的区别

正如@amruth-ls 建议的那样,您可以在jsonlint 验证您的JSON

【讨论】:

  • @anandh 这可能是因为您试图在 ruby​​ 编译器中评估 JSON ......这是行不通的。与 Hash 对象不同,Ruby 无法识别 JSON 语法。 JSON 语法可以从字符串解析为 Hash,反之亦然,但通常当您想将 Ruby 中的数据结构存储到数据库中时,您会使用序列化 Hash 对象而不是 JSON 的列。但只要你找到解决的方法...
【解决方案2】:

最终我通过 to_json 方法修复了上述错误

例如)

{"201"=>"text1", "209"=>"623", "210"=>"625", "211"=>"text2"}.to_json

注意:我习惯了 to_json,因为我没有使用像

这样的代码将值序列化为 JSON
serialize :special_info, JSON

如果我使用上面的代码,那么不需要使用 as_json 进行转换,它会自动将上面的数据解析为 json 数据,否则它会将数据视为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多