2017-05-08 38 views
2

嗨,我是在新的紅寶石和我想要一個嵌套的散列保存到一個JSON文件,最終散列看起來是這樣的:紅寶石創建嵌套的哈希值,並將其保存到JSON

{"**School**":{"*Students*":{ "Info":{},"Values":{} },"*Teachers*":{ "Info":{},"Values":{} } } } 

但最初的散列必須啓動空:

{"**School**":{} } 

然後我需要在各個層面添加元素,像這樣:

{"**School**":{} ,"**Hospital**":{} } 

而且

{"**School**":{ "*Students*":{} } ,"**Hospital**":{} } 

而且

{"**School**":{ "*Students*":{ "*Info*":{ "Name": "Varchar" },"*Values*":{ "Name": "Jane" } } } ,"**Hospital**":{} } 

我試過的東西像下面的一個,但它似乎並沒有工作:

hash = Hash.new 

hash[ "**School**" ] = {"Student":{}} 

hash[ "**School**" ][ "Student" ] = {"Info":{},"Values":{}} 


File.open("saved.json","w") do |f| 

f.write(hash.to_json) 

感謝您的時間和幫助。

+0

你是什麼意思*似乎不工作*?你有錯誤嗎?意想不到的結果?你的問題是什麼? – spickermann

+0

當我嘗試添加值:「教師」:{}散列 – Jay

+0

....我的代碼剛剛覆蓋「** Teachers **」:{}其中位於「** Student **」:{ }。此外,我的代碼還會重複插入以獲得此結果:{「** School **」:{「Teachers」:{},「** Teachers **」:{「_ Info _」:{},_ Values _「:{} }}} – Jay

回答

1

嘗試......

hash = Hash.new 
hash[ "**School**" ] = {} 
hash[ "**School**" ][ "Student" ] = {} 
hash[ "**School**" ][ "Student" ]["Info"] = {} 
hash[ "**School**" ][ "Student" ]["Values"] = {} 

這將在初始化所需結構的散空的內容。

2

您的問題是關鍵:

{"Student": {}} 
# {:Student=>{}} 

:Student 

,而不是

"Student" 

要定義字符串鍵,使用:

{"Student" => {}} 

to_json似乎並不關心,關鍵是一個符號或字符串,並出口他們兩個有相同的格式:

require 'json' 
puts ({a: 1, "a" => 2}.to_json) 
# {"a":1,"a":2} 

這不適用於調試幫助。