例如,我研究了不同的资源,仍然对如何将json格式解析为自定义对象感到困惑。
class Resident
attr_accessor :phone, :addr
def initialize(phone, addr)
@phone = phone
@addr = addr
end
end
和JSON文件
{
"Resident": [
{
"phone": "12345",
"addr": "xxxxx"
}, {
"phone": "12345",
"addr": "xxxxx"
}, {
"phone": "12345",
"addr": "xxxxx"
}
]
}
将json文件解析为3个驻留对象的数组的正确方法是什么?
发布于 2012-10-04 16:55:29
下面的代码更加简单:
require 'json'
data = JSON.parse(json_data)
residents = data['Resident'].map { |rd| Resident.new(rd['phone'], rd['addr']) }
发布于 2015-09-09 10:48:19
今天我在找一个能把json转换成对象的东西,它的效果很不错:
person = JSON.parse(json_string, object_class: OpenStruct)
这样,如果响应是数组,则可以执行person.education.school
或person[0].education.school
我把它留在这里是因为它可能对某些人有用
发布于 2017-07-21 14:43:31
如果你使用的是ActiveModel::Serializers::JSON
,你只需要调用from_json(json)
,你的对象就会被映射成这些值。
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
https://stackoverflow.com/questions/12723094
复制相似问题