我有一个rails应用程序,可以从World Weather Online API获得响应.我正在使用rest-client gem,响应采用
JSON格式.
我使用以下方法解析响应:
parsed_response = JSON.parse(response)
其中parsed_response显然是一个哈希.
我需要的数据是在另一个散列内的另一个散列内的另一个数组内的散列内的数组内的散列内的字符串.
最内层的嵌套哈希在[“每小时”]内,是一个包含20个键的8个哈希数组,拥有各种天气参数的字符串值.阵列中的每个散列都是一天中的不同时间(预测是三小时,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响应的每个项目中使用它.