Ruby解析JSON时如何忽略结构不完整的响应避免NilClass报错
Ruby 嵌套JSON安全取值避免Nil报错方案
- 最优方案:使用Ruby 2.3及以上版本自带的
Hash#dig方法dig方法会按传入的key顺序逐层取值,只要中间任意一层不存在或者值为nil,就直接返回nil,不会抛出NoMethodError,示例代码如下:obj_json = JSON.parse(message.payload) json_id = obj_json.dig('glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'ID') # 仅当取到有效值时执行后续逻辑,自动忽略结构不完整的响应 if json_id puts json_id # 其他业务逻辑 end - 低版本Ruby兼容方案
如果使用的是2.3以下不支持dig的Ruby版本,可以选以下两种替代写法:- 安全导航运算符
&.配合取值
json_id = obj_json['glossary']&.[]('GlossDiv')&.[]('GlossList')&.[]('GlossEntry')&.[]('ID')fetch方法指定默认空哈希兜底
json_id = obj_json.fetch('glossary', {}).fetch('GlossDiv', {}).fetch('GlossList', {}).fetch('GlossEntry', {}).fetch('ID', nil) - 安全导航运算符
- 不推荐的方案:异常捕获
虽然可以用begin-rescue捕获NoMethodError实现需求,但异常捕获适合处理意外错误,不适合作为正常业务逻辑的判断分支,会掩盖其他潜在代码问题,因此不推荐使用。
内容的提问来源于stack exchange,提问作者Meeo Meo
相关产品推荐
相关产品推荐

