首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将json解析为对象ruby

将json解析为对象ruby
EN

Stack Overflow用户
提问于 2012-10-04 16:18:45
回答 5查看 44.4K关注 0票数 38

例如,我研究了不同的资源,仍然对如何将json格式解析为自定义对象感到困惑。

代码语言:javascript
复制
class Resident
  attr_accessor :phone, :addr

  def initialize(phone, addr)
      @phone = phone
      @addr = addr
  end
end    

和JSON文件

代码语言:javascript
复制
{
  "Resident": [
    {
      "phone": "12345",
      "addr":  "xxxxx"
    }, {
      "phone": "12345",
      "addr": "xxxxx"
    }, {
      "phone": "12345",
      "addr": "xxxxx"
    }
  ]
}

将json文件解析为3个驻留对象的数组的正确方法是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-04 16:55:29

下面的代码更加简单:

代码语言:javascript
复制
require 'json'

data = JSON.parse(json_data)
residents = data['Resident'].map { |rd| Resident.new(rd['phone'], rd['addr']) }
票数 39
EN

Stack Overflow用户

发布于 2015-09-09 10:48:19

今天我在找一个能把json转换成对象的东西,它的效果很不错:

代码语言:javascript
复制
person = JSON.parse(json_string, object_class: OpenStruct)

这样,如果响应是数组,则可以执行person.education.schoolperson[0].education.school

我把它留在这里是因为它可能对某些人有用

票数 96
EN

Stack Overflow用户

发布于 2017-07-21 14:43:31

如果你使用的是ActiveModel::Serializers::JSON,你只需要调用from_json(json),你的对象就会被映射成这些值。

代码语言:javascript
复制
class Person
  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 = {name: 'bob', age: 22, awesome: true}.to_json
person = Person.new
person.from_json(json) # => #<Person:0x007fec5e7a0088 @age=22, @awesome=true, @name="bob">
person.name # => "bob"
person.age # => 22
person.awesome # => true
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12723094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档