【问题标题】:What's the proper way to check if JSON has a key?检查 JSON 是否有密钥的正确方法是什么?
【发布时间】:2016-07-06 14:32:37
【问题描述】:

我使用的是 Rails 4.2.3。我有这个应该解析 JSON 的代码

my_object_id = my_object.key?("id") ? my_object['id'] : nil

但是当“my_object” JSON 是‘[“name”, “Info”]’时,我得到以下错误

undefined method `key?' for ["name", "Info"]:Array

检查我的 JSON 是否有“id”键的正确方法是什么?

【问题讨论】:

  • my_object.key?("id") 会出错,因为my_object 是一个数组,key? 是一种哈希方法。能发一下my_object的json结构吗?

标签: ruby-on-rails json ruby-on-rails-4 key


【解决方案1】:

正如@Pramod 所指出的,您似乎将哈希与数组混淆了。

您可以这样做,这意味着它只会在my_object 的类型正确时尝试检索id

my_object_id = (my_object.is_a?(Hash) && my_object.key?("id")) ? my_object['id'] : nil

但是,这种条件的需要可能表明您的设计中的其他地方存在弱点,因为您无法确定 my_object 的类型。

【讨论】:

    【解决方案2】:

    您可以使用 has_key 方法。

    my_object_id = my_object.has_key?("id") ? my_object['id'] : nil
    

    在旁注中,您始终可以通过在控制台中运行 object.methods 来检查任何对象的可用方法列表。

    【讨论】:

    • key?has_key? 的别名,所以这应该没有任何区别。
    • 注明。谢谢 :) 我想实际的解决方案取决于@Mike 的 json 对象。
    • JSON 发布在问题和错误消息中,即“NoMethodError (undefined method `has_key?' for ["name", "Info"]:Array):"。
    猜你喜欢
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    相关资源
    最近更新 更多