2014-03-30 2 views
0

Я использую рубин версии 2.0.0, у меня есть demo.json файл, который выглядит следующим образом:выборки JSon файл затем манипулировать данными с рубином

{ "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 # 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»? –

Смежные вопросы