use*_*579 6 ruby api hash json ruby-on-rails
我有一个rails应用程序,可以从World Weather Online API获得响应.我正在使用rest-client gem,响应采用JSON格式.
我使用以下方法解析响应:
parsed_response = JSON.parse(response)
Run Code Online (Sandbox Code Playgroud)
哈利parsed_response显然在哪里.
我需要的数据是在另一个散列内的另一个散列内的另一个数组内的散列内的数组内的散列内的字符串.
最内层的嵌套哈希在里面["hourly"],是一个由8个哈希组成的数组,每个哈希有20个键,拥有各种天气参数的字符串值.阵列中的每个散列都是一天中的不同时间(预测是三小时,3*8 = 24小时).
所以,例如,如果我想在晚上9点以米为单位的膨胀高度,我会通过以下调用找到它:
@swell_height = parsed_data["data"]["weather"][0]["hourly"][7]["swellHeight_m"]
Run Code Online (Sandbox Code Playgroud)
数组中第7个元素对应的位置 "time" => "2100"
虽然我可以肯定地使用它,但我很好奇是否有更直接的方法来访问我的数据,比如它是否是数据库表,我可以使用活动记录,例如:
@swell_height = parsed_data.swellHeight_m.where(:time => "2100")
Run Code Online (Sandbox Code Playgroud)
您可能想要查看JSONPath.它完全符合您的需求.它的语法与XPath非常相似,但JSONPath与JSON数据一起使用(很明显).
有一个Ruby实现:https://github.com/joshbuddy/jsonpath
我个人在我需要测试JSON响应的每个项目中使用它.