【问题标题】:Use JSON.parse to parse OpenStruct or a hash使用 JSON.parse 解析 OpenStruct 或哈希
【发布时间】:2018-05-31 15:15:11
【问题描述】:

我试图解析这样一个简单的 JSON:

JSON.parse({"pong": "ok"})

失败了

2.4.0 :014 > JSON.parse({"pong": "ok"})
TypeError: no implicit conversion of Hash into String
    from (irb):14

这里有什么问题?为什么要转换为 String ?

再次尝试,这次使用 OpenStruct

2.4.0 :001 > pong = OpenStruct.new(pong: 'OK')
 => #<OpenStruct pong="OK"> 
2.4.0 :002 > JSON.parse(pong)
TypeError: no implicit conversion of OpenStruct into String
    from (irb):2

一样吗? 谢谢

【问题讨论】:

  • 你想达到什么目的?如果要从 ruby​​ 哈希生成 JSON 字符串,则可以require 'json',然后使用Hash#to_json
  • 我正在尝试从虚拟 Ping 控制器(Rails 5、Ruby 2.5.0)返回一些 JSON 响应,如下所示:render json: &lt;some object&gt;。这就是为什么我尝试传递 JSON 或 OpenStruct 对象但没有成功的原因:OpenStruct.new(pong: 'OK').
  • render json: {pong: 'ok'} 应该可以吗??
  • 顺便说一下,您上面的控制台显示的是 ruby​​ 2.4.0,而不是 2.5.0
  • @TomLord,不错,我在 5 秒后更新了Gemfile5 秒以使用 2.5.0。是的,谢谢你,你的版本对我有用。

标签: json ruby hashmap openstruct


【解决方案1】:

JSON.parse 解析jsonjson 表示String

JSON.parse('{"pong": "ok"}')
#⇒ {"pong"=>"ok"}

另外,你可以解析 json 字符串到OpenStruct:

JSON.parse('{"pong":"ok"}', object_class: OpenStruct).pong
#⇒ "ok"

【讨论】:

  • 谢谢,第一个解决方案对我有用(我的错,我必须像你一样传入一个字符串而不是哈希)
猜你喜欢
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 2012-07-13
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多