代码之家  ›  专栏  ›  技术社区  ›  M. Ryan

为什么这个Ruby语句会抛出异常(阵列/布尔)

  •  0
  • M. Ryan  · 技术社区  · 15 年前

    我不是红宝石人,我只是在电视上玩。我必须修改某人的旧Cron作业,以提取一些JSON并将其转换为对象。

    raw_json = Net::HTTP.get(URI.parse("url removed to protect the innocent"))
    
    tags = ActiveSupport::JSON.decode(raw_json)
    
    puts tags.count
    

    tags.count将精确跟踪为5,但该行会立即导致崩溃,如下所示:

    5 #the accurate count!
    rake aborted!
    undefined method `count' for false:FalseClass
    

    怎么回事?

    4 回复  |  直到 15 年前
        1
  •  1
  •   Jordan Running    15 年前

    内容是什么 raw_json ? 看起来发生的是 ActiveSupport::JSON#decode 返回false(因此 undefined method 'count' for false:FalseClass ). 我想 JSON#decode 只在给定空字符串时返回false,这意味着 HTTP#get 原始json

        2
  •  1
  •   Matt Briggs    15 年前

    所以我不知道这里发生了什么,但是JSON.decode 给你一个hash,它没有count方法。不过,它确实有一个大小方法

    tags.size
    

    如果这不起作用,请尝试使用p标记,或者放置tags.class.name来尝试找出您正在使用的内容

        3
  •  0
  •   mb14    15 年前

    显然,标签是假的,这可能意味着你的Net::HTTP.get失败了(我猜你的URL是错误的)。 试着打印标签看看是什么(我想无论如何,你应该使用一个有效的URI)

        4
  •  0
  •   yagooar    14 年前

    >> ActiveSupport::JSON::decode("")
    => false
    >> ActiveSupport::JSON::decode("false")
    => false
    

    这是一种非常奇怪的行为。

    推荐文章