2015-11-16 139 views
-2

我需要轉換以下散列:如何哈希轉換與代表嵌套到嵌套哈希鍵

{ 
    "item[0][size]" => "12", 
    "item[0][count]" => "1" 
} 

這樣:

{ 
    "item": { 
    "0": { 
     "size": "12", 
     "count": "1" 
    } 
    } 
} 

能否請您就如何實現,大多數的意見優雅?也許我可以重用一些用於解析參數字符串的ActionPack實用方法?

+0

你嘗試過什麼嗎? –

+0

嘗試搜索actionpack的代碼庫,並嘗試'CGI :: parse('item [0] [size] = 12')'但它不分析嵌套密鑰字符串 – roody

+1

該散列的來源是什麼?修復它可能是有意義的,而不是構建解決方法。 – spickermann

回答

0

經過一番研究,我發現了一個方法來解析嵌套查詢鍵使用http://apidock.com/rails/Rack/Utils/parse_nested_query

Rack::Utils.parse_nested_query('item[0][size]') 
=> { 
    "item" => { 
    "0" => { 
     "size" => nil 
    } 
    } 
} 

所以它現在可以做到:

items_string = item_hash.to_a.map { |row| row.join('=') }.join('&') 
result = Rack::Utils.parse_nested_query(items_string) 

=> { 
    "item" => { 
    "0" => { 
     "size" => "12", 
     "count" => "1" 
    } 
    } 
} 
+0

這並不符合你的要求。始終如一。 – sawa

+0

@sawa,更新了預期的結果以將字符串作爲值。但我正在尋找一個想法將嵌套密鑰轉換爲哈希,我發現了這一點。問候 – roody

+0

不僅價值觀而且關鍵。 – sawa

1

您可以重用rack LIB方法Rack::Utils.parse_nested_query

require "rack" 
def p p 
    Rack::Utils.parse_nested_query(p)            
end 
p 'item[0][size]=12' # => {"item"=>{"0"=>{"size"=>"12"}}} 

Found here

+0

請注意,這與OP要求的內容非常接近,但並不相同。 – sawa

+0

@sawa是的,但我的答案基於[這](http://stackoverflow.com/questions/33738395/how-to-convert-hash-with-keys-representing-nesting-into-a-nested-hash/ 33739000?noredirect = 1#comment55245796_33738395)OP評論。是的,目前還不清楚OP的要求。 –