【问题标题】:How to store the nested hash path of the xml response?如何存储 xml 响应的嵌套哈希路径?
【发布时间】:2015-10-06 14:10:56
【问题描述】:

我已将以下 xml 响应从 savon 转换为哈希

{:read_measurements_list_response=>{:read_measurements_list_result=>{:sensor_data_list=>{:sensor_data=>[{:type=>"Humidity", :value=>"26.20"}, {:type=>"Temperature", :value=>"33.12"}, {:type=>"Light", :value=>"5501.0"}, {:type=>"SoilMoisture", :value=>"0.223"}, {:type=>"Conductivity", :value=>"0.031"}, {:type=>"GroundTemperature", :value=>"26.9"}]}}, :@xmlns=>"http://tempuri.org/"}}

这样我就可以深入了解那些 sensor_data 密钥对了

res_body[:read_measurements_list_response][:read_measurements_list_result][:sensor_data_list][:sensor_data]

如何将此路径存储到变量中,以便在 xml 响应更改结构时更改它?我尝试过使用几种东西,但没有任何效果。能做 res_body[hash_path] 就好了。

【问题讨论】:

    标签: ruby xml hash savon


    【解决方案1】:

    你在问两件事:

    1. 如何将此路径存储到变量中?

    这取决于您的环境:您可以将其存储在数据库、文件中、将其硬编码到您的代码中、将其作为方法的默认值传递等等。

    1. 能做 res_body[hash_path] 就好了

    您必须推出自己的解决方案。像这样的东西可以工作:

    def hash_search(hash, keys)
      return hash.fetch(keys.first, nil) if hash.blank? || keys.size <= 1
      return hash_search(hash.fetch(keys[0], {}), keys[1..-1])
    end
    
    > hash = {a: {b: {c: 1}}}
    => {:a=>{:b=>{:c=>1}}}
    > hash_search(hash, [:a, :b, :c])
    => 1
    

    【讨论】:

    • 我认为这与我提出的问题无关。我只是想知道如何存储导致内部哈希数组的哈希路径,以便 1)我可以让用户在需要调整默认值时相应地编辑这个路径变量 2)我可以将它作为常量存储在我的 ruby​​ 脚本顶部,以便有人可以轻松找到它并在需要时对其进行修改。
    猜你喜欢
    • 2018-09-15
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多