Как записать в файл JSON в правильном формате - PullRequest
98 голосов
/ 01 апреля 2011

Я создаю хэш в Ruby и хочу записать его в файл JSON в правильном формате.

Вот мой код:

tempHash = {
    "key_a" => "val_a",
    "key_b" => "val_b"
}
fJson = File.open("public/temp.json","w")
fJson.write(tempHash)
fJson.close

А вот содержимое полученного файла:

key_aval_akey_bval_b

Я использую Sinatra (не знаю, чтоверсия) и Ruby v 1.8.7.

Как я могу записать это в файл в правильном формате JSON?

Ответы [ 4 ]

160 голосов
/ 01 апреля 2011

Требуется библиотека JSON и использование to_json.

require 'json'
tempHash = {
    "key_a" => "val_a",
    "key_b" => "val_b"
}
File.open("public/temp.json","w") do |f|
  f.write(tempHash.to_json)
end

Ваш файл temp.json теперь выглядит следующим образом:

{"key_a":"val_a","key_b":"val_b"}
79 голосов
/ 04 мая 2011

с форматированием

require 'json'
tempHash = {
    "key_a" => "val_a",
    "key_b" => "val_b"
}
File.open("public/temp.json","w") do |f|
  f.write(JSON.pretty_generate(tempHash))
end

выход

{
    "key_a":"val_a",
    "key_b":"val_b"
}
7 голосов
/ 19 октября 2017

Этот вопрос относится к ruby ​​1.8, но он все еще занимает первое место при поиске в Google.

в ruby> = 1.9 вы можете использовать

File.write("public/temp.json",tempHash.to_json)

, кроме того, что упоминалось в других ответах, вruby 1.8 вы также можете использовать одну форму лайнера

File.open("public/temp.json","w"){ |f| f.write tempHash.to_json }
3 голосов
/ 04 сентября 2012

Чтобы это работало в Ubuntu Linux:

  1. Я установил пакет Ubuntu ruby-json:

    apt-get install ruby-json
    
  2. Я написалскрипт в ${HOME}/rubybin/jsonDEMO

  3. $HOME/.bashrc включен:

    ${HOME}/rubybin:${PATH}
    

(В этом случае я также набрал вышеприведенное в команде bashline.)

Тогда сработало, когда я ввел в командной строке:

jsonDemo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...