【问题标题】:Unable to parse json with ruby无法用 ruby​​ 解析 json
【发布时间】:2012-06-29 05:27:13
【问题描述】:

我创建了以下类

  class Contact
    def initialize(id, name, phone)
      @id = id
      @name = name
      @phone = phone
    end

    def to_json(*a)
      {
        json_class: self.class.name,
        data: { id: @id, name: @name, phone: @phone }
      }.to_json(*a)
    end

    def self.json_create(o)
      new( o[:data][:id], o[:data][:name], o[:data][:phone] )
    end
  end

我现在可以使用这个将它转换为 json

Contact.new(1,'nik',10).to_json
 => "{\"json_class\":\"Contact\",\"data\":{\"id\":1,\"name\":\"nik\",\"phone\":10}}" 

但是当我在上面调用JSON.parse 时,它会出现错误。

JSON.parse(Contact.new(1,'nik',10).to_json)
NoMethodError: undefined method `[]' for nil:NilClass
    from (irb):44:in `json_create'

我从this 教程中学习了语法。

【问题讨论】:

    标签: ruby json parsing


    【解决方案1】:

    使用as_json 代替to_json

    【讨论】:

      【解决方案2】:

      去掉 json_create 方法中的符号。

      def self.json_create(o)
        new( o['data']['id'], o['data']['name'], o['data']['phone'] )
      end
      

      【讨论】:

      • 成功了,你能告诉我为什么我做错了,我的印象是符号和字符串可以互换使用,并且符号有更好的性能。
      • 符号和字符串是不同的对象。符号始终是对同一个对象的引用,而字符串是每次引用的新对象(除非存储在变量中)。
      • @AndréSantosdeMedeiros 所说的是正确的。您正在考虑的行为是 Rails 附带的,它提供了一个HashWithIndifferentAccess,让您可以使用键的符号或字符串形式来访问值。
      猜你喜欢
      • 2010-11-14
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多