【问题标题】:JSON Parsing in RubyRuby 中的 JSON 解析
【发布时间】:2015-06-28 13:02:32
【问题描述】:

我正在尝试从 Ruby 中的 JSON(使用 JSON gem)解析以下内容:

{ 
  "daily": {
    "summary":"Light rain today through Saturday, with temperatures rising to 88°F on Saturday.",
    "icon":"rain",
    "data":[
      {
        "time":1435464000,
        "precipProbability":0.99
      }
    ]
  }
}

目前我拥有的是:forecast["daily"]["data"],但当它是1435464000 时,我想为time 获取precipProbability。有关如何完成我当前的 JSON 解析查询的任何建议?

【问题讨论】:

  • 你可以写forecast["daily"]["data"].first['precipProbability']
  • ^ 如果您可以提交作为答案,我会将其标记为正确。谢谢! :)
  • @Ojash 您的答案适用于提供的示例,但是如果向该数组中添加了更多元素,您无法确定您是否会在 OP 正在寻找的时间内获得该元素。跨度>
  • 非常正确@LeoCorrea,我宁愿循环出来并显示,因为它是一个你永远不知道的数组;)而且我很确定 maclover7 并不是要查询完全相同的时间,我的假设是否可能会有所不同,需要的是降水概率。

标签: ruby json


【解决方案1】:

由于data 字段是一个对象数组,因此您可以像访问任何Enumerable 一样访问它的每个成员的属性。

如果您想查找时间 1435464000 的数据,只需使用 Enumerable#find 执行以下操作

data = forecast["daily"]["data"].find { |d| d["time"] == 1435464000 }
# ensure data exists for time
if data
  data["precipProbability"]
end

【讨论】:

    【解决方案2】:

    您的查询最简单的解决方案是

    forecast["daily"]["data"].first['precipProbability']
    

    但是我建议你将它放在一个循环中,因为数组上可能没有数据或多个数据

    forecast["daily"]["data"].each do |data|
      puts data['precipProbability'] # or your implementation logic 
    end
    

    【讨论】:

      【解决方案3】:

      任何时候您正在查看像数组这样的可迭代对象,使用 Enumerable module 中的方法非常好

      在这种情况下,您的 data 是一个数组,并且您正在寻找与条件匹配的对象(时间 = 1435464000),因此您正在寻找 detect 方法,也称为更具描述性姓名find

      data_on_day_you_want = forecast["daily"]["data"].detect{ |h| h["time"] == 1435464000 }
      precip = data_on_day_you_want["precipProbability"]
      

      显然这可以内联或分解成更多方法,但重要的是detect。您将一个块传递给它,它会返回 data 数组的第一个元素,该数组返回该块的 true

      【讨论】:

        【解决方案4】:
        require 'Faraday'
        require "JSON"
        
        connection = Faraday.new(JSON.file)
        response = connection.get
        
        data_hash = JSON.parse(response.body)["daily"]
        data_hash.each do |item|
        p item
        
        end
        

        【讨论】:

        • 您好,欢迎来到 SO!虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。请阅读tourHow do I write a good answer?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-23
        • 2012-06-29
        • 1970-01-01
        相关资源
        最近更新 更多