在 Ruby 中的大型 json 文件中搜索值

Search values in a large json file in Ruby

所以我正在学习 ruby,我必须在大 JSON 中找到特定的值。 我需要得到这个字段,但我做不到。

我有这个json:

[{"origen"=>                                                  
    {"productor"=>"Agencia Estatal de Meteorología - AEMET. Gobierno de España",
     "web"=>"https://www.aemet.es",                              "enlace"=>"https://www.aemet.es/es/eltiempo/prediccion/municipios/horas/lagran-id01030",
     "language"=>"es",                                         
     "copyright"=>"© AEMET. Autorizado el uso de la información y su reproducción citando a AEMET como autora de la misma.",
     "notaLegal"=>"https://www.aemet.es/es/nota_legal"},         
   "elaborado"=>"2022-03-30T22:43:40",                         
   "nombre"=>"Lagrán",                                         
   "provincia"=>"Araba/Álava",
   "prediccion"=>
    {"dia"=>
      [{"estadoCielo"=>
         [{"value"=>"16", "periodo"=>"20", "descripcion"=>"Cubierto"},
          {"value"=>"16n", "periodo"=>"21", "descripcion"=>"Cubierto"},
          {"value"=>"82n", "periodo"=>"22", "descripcion"=>"Bruma"},
          {"value"=>"16n", "periodo"=>"23", "descripcion"=>"Cubierto"}],
        "precipitacion"=>[{"value"=>"0", "periodo"=>"20"}, {"value"=>"0", "periodo"=>"21"}, {"value"=>"0", "periodo"=>"22"}, {"value"=>"Ip", "periodo"=>"23"}],
        "probPrecipitacion"=>[{"value"=>"5", "periodo"=>"2002"}],
        "probTormenta"=>[{"value"=>"5", "periodo"=>"2002"}],
        "nieve"=>[{"value"=>"0", "periodo"=>"20"}, {"value"=>"0", "periodo"=>"21"}, {"value"=>"0", "periodo"=>"22"}, {"value"=>"0", "periodo"=>"23"}],
        "probNieve"=>[{"value"=>"0", "periodo"=>"2002"}],
     "temperatura"=>[{"value"=>"7", "periodo"=>"21"}, {"value"=>"6", "periodo"=>"22"}, {"value"=>"6", "periodo"=>"23"}],      
        "sensTermica"=>[{"value"=>"4", "periodo"=>"21"}, {"value"=>"2", "periodo"=>"22"}, {"value"=>"3", "periodo"=>"23"}],     
        "humedadRelativa"=>[{"value"=>"81", "periodo"=>"21"}, {"value"=>"84", "periodo"=>"22"}, {"value"=>"87", "periodo"=>"23"}]
        "vientoAndRachaMax"=>
         [{"direccion"=>["N"], "velocidad"=>["15"], "periodo"=>"21"},
          {"value"=>"45", "periodo"=>"21"},
          {"direccion"=>["NO"], "velocidad"=>["19"], "periodo"=>"22"},
          {"value"=>"39", "periodo"=>"22"},
          {"direccion"=>["N"], "velocidad"=>["15"], "periodo"=>"23"},
          {"value"=>"44", "periodo"=>"23"}],

        "fecha"=>"2022-03-30T00:00:00",

        "orto"=>"07:56",
        "ocaso"=>"20:34"},

我想要字段 "fecha"=>"2022-03-30T00:00:00",

我正在尝试这个:

def json json
  puts json[0].select {|json| json["fecha"]}
end

输出是这样的: {} 所以我知道我做得很糟糕,因为我得到的是空白输出。

知道那里发生了什么吗?

谢谢!

好的,所以为了通过 Hash 进行导航(因为您共享的不是 JSON 本身,而是 ruby 哈希。) ,您可以使用 dig 方法。 --> 这里的用法示例:https://apidock.com/ruby/Hash/dig(我也建议阅读 rails 文档。)

您分享的内容也不是有效的散列,但我尝试自己关闭缺少的括号并且成功了。 试试这个:

def json json 
 json.dig(0, 'prediccion', 'dia', 0, 'fecha')
end

这是假设您始终需要根数组的第一个元素和 dia 数组的第一个元素。

如果您想动态获取它们,则必须循环遍历它们并将 0 替换为循环索引。