2014-01-06 47 views
1

我有一個數組:轉換陣列空PARAMS哈希

arr = ["dog", "cat", "eel"] 

而且我想它轉換成JSON像這樣:

'{"dog": {}, "cat": {}, "eel": {} }' 

我使用的地圖一樣嘗試所以:

arr.map{ |a| { a => {} } } 

然後使用.to_json,但它不起作用。

回答

2

我會使用each_with_object正是如此:

h = arr.each_with_object({}) { |k,h| h[k] = { } } 

然後你可以JSONifiy h as ne EDED。

+0

謝謝!這工作完美。我會盡可能接受。 –

1

簡單的解決辦法是:

arr = [...] 
hash = {} 
arr.each {|k| hash[k] = {} } 
1
arr = ["dog", "cat", "eel"] 
@hash = {} 

arr.collect{|a| @hash[a] ={}} 

@hash.to_json 
# "{\"dog\":{},\"cat\":{},\"eel\":{}}" 

您正在嘗試初始化一個空哈希數組中的每個元素,to_json不會工作一樣,

2

替代使用Hash::[]

arr = ["dog", "cat", "eel"] 
Hash[arr.map { |key| [key,{}] }] 
# => {"dog"=>{}, "cat"=>{}, "eel"=>{}} 
puts JSON.dump(Hash[arr.map { |key| [key,{}] }]) 
# => {"dog":{},"cat":{},"eel":{}} 
+0

啊,就是這樣。如果沒有使用'Hash []'的答案,我會添加它。 –

1
arr = ["dog", "cat", "eel"] 

# For Hash 
hash = arr.inject({}) {|h, element| h.update(element => {}) } 
# => {"dog"=>{}, "cat"=>{}, "eel"=>{}} 

# For JSON Hash 
json_hash = arr.inject({}) {|h, element| h.update(element => {}) }.to_json 
# => "{\"dog\":{},\"cat\":{},\"eel\":{}}" 
2

在紅寶石2.1.0

a = [...] 
a.map{|k| [k,{}] }.to_h