/ / Crea hashes anidados en ruby ​​y guárdalos en JSON - json, ruby, ruby-hash

Crea hashes anidados en ruby ​​y guárdalos en JSON - json, ruby, ruby-hash

Hola, soy nuevo en Ruby y estoy tratando de guardar un hash anidado en un archivo JSON, el hash final se ve así:

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

Pero inicialmente el hash debe comenzar vacío:

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

Y luego necesito agregar elementos en todos los niveles, así:

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

Y

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

Y

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

Intenté algo como el siguiente, pero no parece funcionar:

hash = Hash.new

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

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


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

f.write(hash.to_json)

Gracias por tu tiempo y ayuda.

Respuestas

1 para la respuesta № 1

Prueba esto...

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

Esto inicializará su hash en la estructura deseada con contenido vacío.


2 para la respuesta № 2

Su problema es que la clave de:

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

es

:Student

y no

"Student"

Para definir una clave de cadena, use:

{"Student" => {}}

to_json no parece importarle si la clave es un símbolo o una cadena, y los exporta a ambos con el mismo formato:

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

Esto no ayuda para la depuración.