1
我處於需要查找哈希級別併爲該級別中的所有元素應用名稱空間的情況。Ruby:如何在哈希中以名稱空間作爲前綴
這是情景:
我有填充了我的數據的對象。
接下來我將對象轉換爲散列。
#convert Object to Hash def my_hash Hash[instance_variables.map { |var| [var[1..-1].to_sym, instance_variable_get(var)] }] end
最後,我想環路直通的哈希和應用不同的命名空間,以我的嵌套的哈希值。
遺憾的是我沒能找到一個很好的解決方案直接薩翁寶石做到這一點:
soap.body = request_object.my_hash
我會檢查每個元素,並試圖找到在分類方法中的嵌套層次遞歸(這需要一些魔術)
def classify(o) case o when Hash #Need to refactor this to prefix :data NS for nested hash, overwriting the default :mes NS. h = {} o.each {|k,v| h[k] = classify(v)} h else o.class end end soap.body = classify(request_object.my_hash)
它應該是這樣的,該人士哈希:
{:UserTicket=>'123',:ImpersonationUsername=>'dave',:TicketSettings=>{:ResourceId=>'abcd',:ClientIp=>'0',:Username=>'bobby'}}
輸出(其中MES和數據兩種命名空間):
{'mes:UserTicket'=>'123','mes:ImpersonationUsername'=>'dave','mes:TicketSettings'=>{'data:ResourceId'=>'abcd','data:ClientIp'=>'0','data:Username'=>'bobby'}}
感謝,而不是'字符串',它爲什麼不顯示實際值? – Dejan
這是來自你原來在'case'語句的'else'中有'o.class'的地方。你可以刪除'class'並以'o'結尾。 – tadman