2014-03-30 53 views
0

數據,我有一個demo.json文件看起來像這樣:獲取JSON文件,然後操縱我使用Ruby 2.0.0版本與紅寶石

{ "demo": 
    { 
    "rama" : { "Name": "demo" }, 
    "krishna" : { "Name": "hare","place": "bharat", "hawa": { "maina": "tota"} } 
    } 
} 

現在我試圖通過這種方式來操縱JSON文件:

require 'json' 
options = {} 
options[:demo] = "kailash" 
File.open("demo.json","w") do |f| 

    f.write(JSON.pretty_generate(options)) 

end 

我想替換一些值並在現有的JSON文件中添加一些新的鍵值對,並且不想完全替換整個JSON文件。有沒有辦法做到這一點?

+0

您需要使用'JSON :: parse'方法,首先獲得* hash *對象。然後遍歷* hash *,並更新任何你想要的值。完成後,使用'Hash#to_json'方法使其成爲'JSON'對象,然後將其寫回到文件中。 –

+0

你可以用代碼格式寫這個嗎? –

+0

確定告訴我你想在'.json'文件中更新什麼值? –

回答

5

您必須首先閱讀和分析文件,然後進行更改,最後你可以覆蓋與更新的對象文件:

require 'json' 

options = JSON.parse(IO.read('demo.json')) 
options['demo']['kailash'] = { "Name" => "new" } 

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

    f.write(JSON.pretty_generate(options)) 

end 

輸出文件:

{ 
    "demo": { 
    "rama": { 
     "Name": "demo" 
    }, 
    "krishna": { 
     "Name": "hare", 
     "place": "bharat", 
     "hawa": { 
     "main": "tota" 
     } 
    }, 
    "kailash": { 
     "Name": "new" 
    } 
    } 
} 
+0

+1 ..是的,這是解決它的方法,正如我在評論中所說的。 –

+0

稍微短一點的寫法是'File.write('demo.json',JSON.pretty_generate(options))' –

+0

但是如果我想更新現有密鑰的值,比如「rama」呢? –