Javascript 在RubyonRails中尝试将字符串转换为JSON对象时感到困惑

Javascript 在RubyonRails中尝试将字符串转换为JSON对象时感到困惑,javascript,ruby-on-rails,json,Javascript,Ruby On Rails,Json,也许我睡得不好。我认为这很简单,因为我无法将字符串转换为JSON对象 在一个特定的控制器动作中,我做了如下操作: def my_action user = User.find(current_user_id) profile = Profile.find_by(user_id: current_user_id) company = Company.find(id) colors = company.colors { id: user.id, username: user.us

也许我睡得不好。我认为这很简单,因为我无法将字符串转换为JSON对象

在一个特定的控制器动作中,我做了如下操作:

def my_action
  user = User.find(current_user_id)
  profile = Profile.find_by(user_id: current_user_id)
  company = Company.find(id)
  colors = company.colors
  { id: user.id, username: user.username, email: user.email, profile: profile, company: company, colors: colors}
end
变量
colors
来自数据类型为JSON的列中的my Postgres DB,并产生以下输出:

"{color0:[#2d2445,#433566,#5C4AB4,#685DF2,#6c6eff,#D6D3FB,#EAEAFF], color1: [#262474,#434595,#524FFF,#528fff,#71A3FF,#B0CCFF,#F1F6FF]}"
然后在主JSON对象内返回该输出,但它作为字符串使用。我试图将该字符串转换为JSON,使其成为主对象中的一个对象

我试图执行
JSON.parse(colors)
,但我遇到了一个解析错误:

JSON::ParserError: 767: unexpected token at '{color0:[#2d2445,#433566,#5C4AB4,#685DF2,#6c6eff,#D6D3FB,#EAEAFF], color1: [#262474,#434595,#524FFF,#528fff,#71A3FF,#B0CCFF,#F1F6FF]}'

关于如何将该字符串转换为我可以在JS中使用的有效JSON对象,有什么想法吗?

首先要确保数据库中的数据是正确的。rails+postgres中的JSON/JSONB列是开箱即用的(反)序列化,
company.colors.class
应该已经是散列,但在保存之前它看起来像是转换为字符串(也是有效的JSON类型,因此保存时没有错误)

在遗留项目中,如果仍然存在
serialize:colors
,并且列已经是json,那么在从文本切换到json的过程中,由于双重序列化,可能会发生这种情况。或者在之前的某个时候,它可能在客户端被错误地序列化(json在客户端是无效的)

作为恢复现有半无效数据的黑客,您可以:

如果company.colors.is_是?(字符串)
company.colors=JSON.parse(
company.colors.gsub(/(#[0-9a-fA-F]+)/,“\1”).gsub(/\b(\w+):/,“\1:”)
)
结束

非常感谢。事实上,我遇到了一个问题,即作为字符串手动插入数据库中的数据。我没有被正确地序列化。