我有一个rails应用程序,可以从World Weather Online API获得响应。我正在使用rest-client gem,响应采用JSON格式。
我使用以下方法解析响应:
parsed_response = JSON.parse(response)
parsed_response
显然是哈希。
我需要的数据是位于另一个散列内另一个散列内的另一个数组内的散列内的数组内的散列内的字符串。
最内层嵌套的哈希值在["hourly"]
内,是一个包含20个键的8个哈希数组,拥有各种天气参数的字符串值。数组中的每个哈希值都是一天中的不同时间(预测为3小时,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")
答案 0 :(得分:6)
您可能需要查看JSONPath。它完全符合您的需求。它的语法与XPath非常相似,但JSONPath与JSON数据一起使用(很明显)。
有一个Ruby实现:https://github.com/joshbuddy/jsonpath
我个人在需要测试JSON响应的每个项目中使用它。