Ruby-忽略空的JSON响应



想象一下我有以下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

但每当我得到最底层的一个作为响应时,我就会得到以下错误:

nil:NilClass(NoMethodError(的未定义方法"[]">

我如何能够忽略后一个响应?我可能只是想得太复杂了。

谢谢!

ruby有一个名为dig的方法,它为您进行存在性检查。

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

这将继续进入JSON,直到它返回请求的值,或者如果任何键都不存在,则返回nil。

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

相关内容

  • 没有找到相关文章

最新更新