将JSON字符串转换为哈希

时间:2016-01-12 05:32:14

标签: ruby-on-rails ruby

我有一个Ruby on Rails JSON问题。

我认为这是一个奇怪的错误。我有以下JSON字符串,我从外部API

得到这样的字符串
test = "[{'domain': 'abc.com'}, {'domain': 'def.com'}, {'domain': 'ghi.com'}]"

现在,我想使用以下命令将此字符串转换为哈希:

hash = JSON.parse test

问题在于错误:

JSON::ParserError: 419: unexpected token at '{'domain': 'abc.com'}, {'domain': 'def.com'}, {'domain': 'ghi.com'}]'

现在问题就是更换'用"如果任何字符串包括'是危险的或"。有人有解决方案吗?

4 个答案:

答案 0 :(得分:6)

这很可能是因为这不是有效的JSON。将单引号更改为双引号,如下所示:

test = '[{"domain": "abc.com"}, {"domain": "def.com"}, {"domain": "ghi.com"}]'

可以找到解释here,您可以验证您的JSON here

答案 1 :(得分:3)

您收到错误,因为您的字符串不是有效的JSON。在JSON中,所有属性名称必须是双引号,并且字符串值也必须是双引号。单引号永远不会有效。

test = '[{"domain": "abc.com"}, {"domain": "def.com"}, {"domain": "ghi.com"}]'
JSON.parse(test)
# => [ { "domain" => "abc.com" },
#      { "domain" => "def.com" },
#      { "domain" => "ghi.com" } ]

答案 2 :(得分:0)

使用这段代码。你缺少ActiveSupport :: JSON

  ActiveSupport::JSON.decode json_string

答案 3 :(得分:0)

使用Rails 4或更高版本,如果要使用符号键而不是字符串键,则可以使用 deep_symbolize_keys 方法

hash = JSON.parse(test).deep_symbolize_keys

此外,真正的问题是 MyCah 所述的无效json。