2011-02-23 92 views
1

我有以下的請求參數:轉換請求參數哈希

"mappings"=>"[{ \"spec_id\" => \"1\", 
\"item_name\" => \"sku\"}|{ \"spec_id\" => \"2\", 
\"item_name\" => \" productname\"}|{ \"spec_id\" => \"4\", 
\"item_name\" => \" price\"}]" 

我想知道我可以解析在哈希值的項目。

我做的第一件事是

mappings = params[:mapping][:mappings].split("|") 

mappings.each do |map| 
    # don't know how to create the hashes 
end 

我寧願分裂的「」而不是‘|’如果可能的話,我不能100%確定請求參數的格式是否正確。如果不是,請讓我知道,我會改變它。

+0

你確定你的字符串不僅僅是params [:mapping]的shell輸出[ :映射] .inspect?我懷疑你從軌道控制器那裏得到了類似的東西。 – 2011-02-23 17:34:01

+0

我複製了webrick的數據 – craig 2011-02-23 18:03:12

+0

如果有幫助,我已經設法將請求參數更改爲「映射」=>「[{'spec_id'=>'1', 'item_name'=>'sku'} | { 'spec_id'=>'2', 'item_name'=>'productname'} | {'spec_id'=>'4', 'item_name'=>'price'}]「} – craig 2011-02-23 18:06:51

回答

0

,解析字符串,我會做到以下幾點:

str = "[{ \"spec_id\" => \"1\", 
\"item_name\" => \"sku\"}|{ \"spec_id\" => \"2\", 
\"item_name\" => \" productname\"}|{ \"spec_id\" => \"4\", 
\"item_name\" => \" price\"}]" 

mappings = JSON.parse(str.gsub(/}\s*\|\s*{/, '},{').gsub(/\s*\=\>/, ':')) 

這基本上都會轉換你有什麼成JSON字符串通過刪除「|」字符並將'=>'轉換爲':'。當你最終解析結果時,你將解析JSON,所以你會得到一個不錯的紅寶石哈希:

[{"spec_id"=>"1", "item_name"=>"sku"}, {"spec_id"=>"2", "item_name"=>" productname"}, {"spec_id"=>"4", "item_name"=>" price"}] 
+0

最簡單的解決方案是讓我將請求參數更改爲有效的json,然後使用ActiveSupport :: JSON.decode – craig 2011-02-24 23:00:04

+0

很高興我能提供幫助。 – 2011-02-24 23:11:35