0

我有一个网站 API 返回的 JSON 哈希值,我想根据内部哈希值中的特定键值对其进行解析和显示。

我可以想到可以实现这一目标的解决方案,但它们会占用多行代码并且看起来效率不高。当然,在 Rails 中必须有一种本地方式,因为重点是约定优于配置。我用谷歌搜索了一下,但没有找到任何涵盖这个问题的东西。

来自 API 的示例响应:

[{"banner":"01197271","birthday":"1991-01-11","committee_id":1,"created_at":"2012-08-08T01:56:02-05:00","email":"me@example.com","first_name":"Dan","graduation_date":"May 2013","hometown":"San Antonio","hours_enrolled":15,"id":2,"image":{"url":null,"thumb":{"url":null},"large":{"url":null}},"invitation_accepted_at":null,"invitation_limit":null,"invitation_sent_at":null,"invitation_token":null,"invited_by_id":null,"invited_by_type":null,"last_name":"Tester","local_apt":"","local_city":"San Antonio","local_state":"Texas","local_street":"One UTSA Circle","local_zip":"78249","major":"Computer Science","permanent_apt":"","permanent_city":"","permanent_state":"","permanent_street":"One UTSA Circle","permanent_zip":"","phone":"5558813284","same_address":true,"tour_trained":false,"updated_at":"2012-08-17T03:35:26-05:00","utsa_id":"uoi431"},
{"banner":"","birthday":"1990-10-25","committee_id":null,"created_at":"2012-08-03T16:19:23-05:00","email":"you@example.com","first_name":"Test","graduation_date":null,"hometown":null,"hours_enrolled":null,"id":1,"image":{"url":null,"thumb":{"url":null},"large":{"url":null}},"invitation_accepted_at":null,"invitation_limit":null,"invitation_sent_at":null,"invitation_token":null,"invited_by_id":null,"invited_by_type":null,"last_name":"User","local_apt":"","local_city":"","local_state":"","local_street":"","local_zip":"","major":null,"permanent_apt":"","permanent_city":"","permanent_state":"","permanent_street":"","permanent_zip":"","phone":"","same_address":false,"tour_trained":false,"updated_at":"2012-08-15T10:05:54-05:00","utsa_id":""}]

潜在的解决方案是遍历每个内部散列,确定相关键值的值,然后根据键值与已测试散列相比的位置进行存储。完成后,返回。

4

2 回答 2

0

好的,如果您有设置为解析此信息的对象,这些对象可以根据您的哈希参数构建自己。所以你可以做这样的事情

object = MyObject.create(your_hash_parameters)

your_hash_parameters您在示例中提供的参数在哪里。

我不确定如果有比你的对象知道的更多的参数会发生什么,如果它仍然会自行构建。如果是这种情况,您可以使用该delete_if方法排除不需要的属性。

还有一点需要注意,如果这不是您想要保存到数据库中的内容,那么它只是为了显示临时信息。我会建立一个模型attr_accessors,代表您正在显示的属性。

于 2012-08-17T08:53:31.770 回答
0

正如评论中所说,我将创建一个 ActiveResource 对象并向其添加相关方法。

于 2012-08-17T08:57:42.000 回答