7

我有一个从 World Weather Online API 获得响应的 rails 应用程序。我正在使用 rest-client gem,响应是 JSON 格式。

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

parsed_response = JSON.parse(response)

哪里parsed_response明显是一个哈希。

我需要的数据是在另一个散列中的另一个散列中的另一个散列中的另一个散列中的一个散列中的一个数组中的字符串。

最里面的嵌套哈希是 inside ["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")
4

1 回答 1

7

您可能想查看JSONPath。它完全符合您的需要。它的语法与 XPath 非常相似,但 JSONPath 适用于 JSON 数据(很明显)。

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

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

于 2012-09-25T11:07:01.330 回答