Ruby - 忽略空 JSON 响应?

Ruby - ignore empty JSON response?

假设我有以下 JSON 回复:

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

有时我也会这样:

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "0"
        }
    }
}

现在,我想访问上面的 JSON 响应,如:

obj_json = JSON.parse(message.payload)
json_id = (obj_json['glossary']['GlossDiv']['GlossEntry']['ID'])
puts json_id

但是每当我得到底部的响应时,我都会收到以下错误:

undefined method `[]' for nil:NilClass (NoMethodError)

我怎么能忽略后面的回复呢?我可能只是想得太复杂了。

谢谢!

添加条件以检查 GlossEntry 是否存在 json_id = obj_json['glossary']['GlossDiv']['GlossList']['GlossEntry'] ? obj_json['glossary']['GlossDiv']['GlossList']['GlossEntry']['ID'] : ''

ruby 有一个 method called dig 可以为您检查是否存在。

obj_json = JSON.parse(message.payload)
json_id = obj_json.dig('glossary', 'GlossDiv', 'GlossEntry', 'ID')
puts json_id

这将继续进入 JSON 直到它 returns 请求的值或 returns nil 如果任何键不存在。