Ruby on rails 在ruby中,如何将json中包含的json数组解析为类?
我正在使用气泡包装库,它可以很好地将这个json解析为Item类,我的问题是如何提取通知的值。我曾尝试以与父级相同的方式解析通知的键/值,但在解析的行中出现错误(无效的选择器发送到0x34..),我猜只要我只读取了成员属性,它就不再是有效的json了?谢谢Ruby on rails 在ruby中,如何将json中包含的json数组解析为类?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用气泡包装库,它可以很好地将这个json解析为Item类,我的问题是如何提取通知的值。我曾尝试以与父级相同的方式解析通知的键/值,但在解析的行中出现错误(无效的选择器发送到0x34..),我猜只要我只读取了成员属性,它就不再是有效的json了?谢谢 { "users": [ { "id": 5, "username": "96u39nos9u", "password": "estanimiautem", "notif
{
"users": [
{
"id": 5,
"username": "96u39nos9u",
"password": "estanimiautem",
"notifications": [
{
"notification": {
"body": "Eum dolorem aliquam animi ut."
}
},
{
"notification": {
"body": "verities"
}
}
]
}
]
}
要解析为对象的代码段(除通知外有效)
我认为一个好的开始是删除代码中所有不必要的复杂性。这样就更容易诊断出发生了什么
BW::HTTP.get("http://resturl/api/v1/users") do |response|
mydata = BW::JSON.parse(response.body.to_s)["users"]
@data = mydata.collect{|i| Item.new(i)}
@table.dataSource = self
@table.delegate = self
self.view.addSubview @table
end
及
抱歉,这个Ruby代码有点难理解。“p”到底是做什么的?此外,如果您的块不止一行,最好使用do end块,而不是使用“{}”。因此,例如,最好使用mydata.each do | item |。。。结束。@freddyrangel p只是打印到控制台-这是一个ruby运动项目,顺便说一句,我没有提到“p”类似于“puts”,但显示的是对象的检查值,而不是to_s值,因此更易于调试。不能在运动项目之外要求bubblewrap,所以我们很难调试它。你不能只使用核心
JSON
库吗?plusp
比type:D短三个字符
class Item
PROPERTIES = [:id, :name, :status, :email, :notifications]
PROPERTIES.each { |prop|
p prop
attr_accessor prop
}
def initialize(hash = {})
p "initialize"
p hash
p "end initialize"
hash.each { |key, value|
p key
p value
if key.to_s == "notifications"
// pass the values into a local array or separate class?
end
if PROPERTIES.member? key.to_sym
self.send((key.to_s + "=").to_s, value)
end
}
end
end
BW::HTTP.get("http://resturl/api/v1/users") do |response|
mydata = BW::JSON.parse(response.body.to_s)["users"]
@data = mydata.collect{|i| Item.new(i)}
@table.dataSource = self
@table.delegate = self
self.view.addSubview @table
end
class Item
attr_accessor :id, :name, :status, :email, :notifications
def initialize(hash = {})
@id = hash['id']
@name = hash['name']
@status = hash['status']
@email = hash['email']
@notification = hash['notification']
end
end