От json до рубинового хэша? - программирование
Подтвердить что ты не робот

От json до рубинового хэша?

Я могу пойти одним способом, используя

require 'json'

def saveUserLib(user_lib)
    File.open("/Users/name/Documents/user_lib.json","w") do |f|
    f.write($user_lib.to_json)
    end
end

uname = gets.chomp
$user_lib["_uname"] = uname
saveUserLib($user_lib)

но как я могу вернуть его снова как user_lib?

4b9b3361

Ответ 1

Вы хотите JSON.parse или JSON.load

def load_user_lib( filename )
  JSON.parse( IO.read(filename) )
end

Ключевым моментом здесь является использование IO.read в качестве простого способа загрузки строки JSON с диска, чтобы его можно было проанализировать. Или, если у вас есть данные UTF-8 в вашем файле:

  my_object = JSON.parse( IO.read(filename, encoding:'utf-8') )

Я связался с документацией JSON выше, поэтому вы должны прочитать это для более подробной информации. Но в целом:

  • json = my_object.to_json - метод для конкретного объекта для создания строки JSON.
  • json = JSON.generate(my_object) - создать строку JSON из объекта.
  • JSON.dump(my_object, someIO) - создать строку JSON и записать в файл.
  • my_object = JSON.parse(json) - создать объект Ruby из строки JSON.
  • my_object = JSON.load(someIO) - создать объект Ruby из файла.

В качестве альтернативы:

def load_user_lib( filename )
  File.open( filename, "r" ) do |f|
    JSON.load( f )
  end
end

Примечание. Я использовал имя "snake_case" для метода, соответствующего вашему "camelCase" saveUserLib, поскольку это соглашение Ruby.

Ответ 2

вот пример:

require 'json'

source_hash = {s: 12, f: 43}
json_string = JSON.generate source_hash
back_to_hash = JSON.parse json_string

Ответ 3

JSON.load сделает трюк. Вот пример, который идет в обоих направлениях:

>> require 'json'
=> true
>> a = {"1" => "2"}
=> {"1"=>"2"}
>> b = JSON.dump(a)
=> "{\"1\":\"2\"}"
>> c = JSON.load(b)
=> {"1"=>"2"}