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 № 1Prueba 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.