NoMethodError:“{}”的未定义方法`from_json':String

时间:2011-07-27 16:02:22

标签: ruby-on-rails ruby json

当我在项目中加载Rails控制台时,我可以这样做:

{}.to_json

但我不能这样做:

"{}".from_json

即使我首先需要json gem,它也不起作用。是否存在from_json方法?

4 个答案:

答案 0 :(得分:4)

没有。 from_json不存在。如果要从JSON字符串获取Ruby哈希,可以使用JSON#parse方法。示例如下:

json = JSON.parse("{\"hello\": \"world\"}")

以上返回{"hello"=>"world"}

答案 1 :(得分:2)

您的{}.to_json假设是正确的。但是,当我们获取JSON数据(或任何文本数据)并将其转换为某种本机结构时,我们称该进程正在解析。解析一些文本数据并使用该数据初始化其属性的类的实例方法将是奇怪的 - 有点不合适。相反,您通常看到的是静态工厂方法(在Ruby中称为类方法),如:

JSON.parse "{}"

这将在Ruby中返回一个哈希值。

答案 2 :(得分:0)

不,如下文及上文所述,.from_json方法不存在。但是你自己实现起来很简单:

require 'json'
class String
  def from_json
    JSON.load(self) rescue false
  end
end

答案 3 :(得分:0)

刚发生这件事。 from_json现在在框架中。

来自文档...

class Person
  include ActiveModel::Model
  include ActiveModel::AttributeMethods
  include ActiveModel::Serializers::JSON

  attr_accessor :name, :age, :awesome

  def attributes=(hash)
    hash.each do |key, value|
      send("#{key}=", value)
    end
  end

  def attributes
    instance_values
  end
end

我通常用它来将JSON序列化为ActiveModel对象......

json.each do |object|
    object = object.to_json
    myModel = MyModel.new
    myModel.from_json(object)
end

" from_json"错误报告有点糟糕。方法,如果我处理格式错误的JSON,我会得到未定义的方法错误。

多年以后,HTH!