有没有一种特殊的方式来解析Ruby中嵌套的JSON?

有没有一种特殊的方式来解析Ruby中嵌套的JSON?,json,ruby,Json,Ruby,给定任意JSON字符串,例如: “{\'foo\\”:\“{\\'bar\\\”:\\\\\'baz\\\\'}” Ruby中是否有一种方法Ruby JSON或通用特性来递归解析JSON,从而得到以下结果: {foo:{bar::baz} 我不想要的: o=JSON.parse(j) JSON.parse!(o[:foo]) 不太可能。原因是JSON字符串只是一个字符串,所以无法知道它是否是可解析JSON 您可以尝试将所有内容解析为JSON,如下所示: def recursive_parse

给定任意JSON字符串,例如:

“{\'foo\\”:\“{\\'bar\\\”:\\\\\'baz\\\\'}”
Ruby中是否有一种方法Ruby JSON或通用特性来递归解析JSON,从而得到以下结果:

{foo:{bar::baz}
想要的:

o=JSON.parse(j)
JSON.parse!(o[:foo])

不太可能。原因是JSON字符串只是一个字符串,所以无法知道它是否是可解析JSON

您可以尝试将所有内容解析为JSON,如下所示:

def recursive_parse_hash_from_json(str)
  parsed = JSON.parse(str)
  parsed.reduce({}) do |memo, (key, val)|
    new_val = val.is_a?(String) ? recursive_parse_hash_from_json(val) : val
    memo.merge({ key =>  val})
  end
rescue JSON::ParserError
  str
end

json = {"a" => { "b" => "c" }.to_json, "d" => "e"}.to_json
recursive_parse_hash_from_json(json)
# => {"a"=>{"b"=>"c"}, "d"=>"e"}
但这有一些边缘情况——如果其中一个字符串恰好是有效的JSON,但不是有意的呢


但是,根据您的用例,上述方法可能适合您。然而,除了分析,我不建议做任何事情。例如,如果您使用的是用户提供的字符串,而这实际上控制了应用程序的业务逻辑,那么您就不想冒险将某些内容解析为错误的数据类型。

我认为这个gem将帮助您: