【发布时间】:2016-03-30 11:52:33
【问题描述】:
我正在从混合内容源解析一些 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
}
}
这样的迭代会是最有效的解决方案,还是最好坚持冗长、混乱的变量?
【问题讨论】:
标签: ruby-on-rails ruby json activerecord