[英]Ruby/Rails - interate over complex (nested) JSON elements to create objects
我正在从混合内容源中解析一些JSON,并尝试将其与ActiveRecord一起存储。
目前,我正在使用大量的变量:
json['settings']['newsletters']['weekly']
json['info']['address']['city']
或尝试使事情变得容易一些:
newsletters = json['settings']['newsletters']
newsletters['weekly']
address = json['info']['address']
address['city']
但这一切都变得非常混乱,而不是干燥。
我认为执行此操作的更好方法是遍历作为哈希值(因此是“复杂”)的每个元素,并将其分配为自己的对象。 这样,我不必声明一万亿个变量,而是可以从JSON输入的上下文中分配它们。
所以,我可以做这样的事情:
user = json['input']
user.settings.newsletters.weekly
user.info.address.city
这是受ActiveResource文档的启发:
# Any complex element (one that contains other elements) becomes its own object:
#
# {"id":1,"first":"Tyler","address":{"street":"Paper St.","state":"CA"}}
tyler = Person.find(1)
tyler.address # => <Person::Address::xxxxx>
tyler.address.street # => 'Paper St.'
这是JSON,为简洁起见,将其简化为:
{
"username": "robert_fitzsimmonds",
"emails": [{
"id_number": 1,
"address": "robert_fitzsimmonds@yahoo.com",
"confirmed": false
}, {
"id_number": 2,
"address": "robert_fitzsimmonds@gmail.com",
"confirmed": true
}],
"settings": {
"marketing": {
"main": true,
"weekly": false,
"daily": false
},
"language": "English"
},
"info": {
"address": {
"line_1": "31 Mole Road",
"line_2": "",
"city": "London",
"post_code": "NE4 5RJ"
},
"shared_account": false
}
}
这样的迭代会是最有效的解决方案,还是坚持使用长而混乱的变量?
如果可以https://github.com/adsteel/hash_dot,请使用hash_dot gem
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.