在 ruby 中,我如何将 json 解析为对象数组?
示例:我有 2 个类(class):
class Person
attr_accessor :name, :address, :email, :address
end
并且:
class Address
attr_accessor :street, :city, :state, :person
end
当我发出请求时,我得到以下 json:
{
"data": [
{
"id": 9111316,
"name": "Mason Lee",
"email": "normanodonnell@biospan.com",
"address": {
"state": "American Samoa",
"street": "Cameron Court",
"city": "Wakulla"
}
},
{
"id": 500019,
"name": "Stella Weeks",
"email": "hansenwhitfield@candecor.com",
"address": {
"state": "Nevada",
"street": "Lake Street",
"city": "Wacissa"
}
}
]
}
这个json
应该被解析成一个Person
的数组。
现在我正在做:
#json gem
require 'json'
#...
#parse the json and get the 'data'
parsed_json = JSON.parse json
json_data = parsed_json['data']
objects = Array.new
if json_data.kind_of?(Array)
#add each person
json_data.each { |data|
current_person = Person.new
data.each { |k, v|
current_person.send("#{k}=", v)
}
objects.push(current_person)
}
end
#return the array of Person
objects
我有很多像上面例子中的对象,手动解析是不可取的。 有自动执行此操作的方法吗?
我所说的“自动化方式”是指在 java
中使用 jackson 的东西:
ObjectMapper mapper = new ObjectMapper();
List<Person> myObjects = mapper.readValue(json, mapper.getTypeFactory().constructCollectionType(List.class, Person.class));
最佳答案
您可以使用散列初始化 Person:
json_data = JSON.parse(json)['data']
json_data.map do |data|
Person.new data
end
class Person
attr_accessor :name, :email, :address
def initialize params
params.each { |k,v| klass.public_send("#{k}=",v) }
end
end
如果你想动态选择类,你可以使用:
json_data.map do |data|
klass = 'Person'
klass.get_const.new data
关于ruby - 将 json 解析为 ruby 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464740/