ruby-on-rails - Ruby 获取深度嵌套的 JSON API 数据

标签 ruby-on-rails ruby json api hash

我有一个 Rails 应用程序,它从 World Weather Online API 获取响应。我正在使用 rest-client gem,响应采用 JSON 格式。

我使用以下方法解析响应:

parsed_response = JSON.parse(response)

parsed_response 显然是一个散列。

我需要的数据是哈希内的字符串,数组内的哈希,另一个数组内的哈希,另一个哈希内的另一个哈希内的字符串。

最内层的嵌套散列在["hourly"] 中,这是一个由 8 个散列组成的数组,每个散列有 20 个键,拥有各种天气参数的字符串值。数组中的每个哈希值都是一天中的不同时间(预测是每三小时一次,3*8 = 24 小时)。

因此,例如,如果我想要晚上 9 点的涌浪高度(以米为单位),我可以通过以下调用找到它:

@swell_height = parsed_data["data"]["weather"][0]["hourly"][7]["swellHeight_m"]

数组中第7个元素对应"time"=> "2100"

虽然我绝对可以使用它,但我很好奇是否有更直接的方法来访问我的数据,比如如果它是一个数据库表,我可以使用事件记录,比如:

@swell_height = parsed_data.swellHeight_m.where(:time => "2100")

最佳答案

你可能想看看JSONPath .它正是你所需要的。它的语法与 XPath 非常相似,但 JSONPath 适用于 JSON 数据(显而易见)。

有一个 Ruby 实现:https://github.com/joshbuddy/jsonpath

我个人在每个需要测试 JSON 响应的项目​​中都使用它。

关于ruby-on-rails - Ruby 获取深度嵌套的 JSON API 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12574838/

相关文章:

ruby-on-rails - 按多列组合对结果集进行分组

ruby-on-rails - 给定日期和星期几,找到 future 最接近的日期

ruby - 如何使用 Ruby 存储和调用 YAML 文件中的数据?

ruby - 使用 Rubyzip 压缩现有文件

json - 如何使用 postman 测试表单数据?

ruby-on-rails - Rails redirect_to 页面部分

javascript - 在 Rails 中发布表单时使用 HTML5 地理定位

ruby-on-rails - 正则表达式用于规范 Discourse 论坛中的主题链接

python - 将 fetchall() 结果转储到 json

java - android 无法加载本地json数据