You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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版本,可以选以下两种替代写法:
    1. 安全导航运算符&.配合取值
    json_id = obj_json['glossary']&.[]('GlossDiv')&.[]('GlossList')&.[]('GlossEntry')&.[]('ID')
    
    1. fetch方法指定默认空哈希兜底
    json_id = obj_json.fetch('glossary', {}).fetch('GlossDiv', {}).fetch('GlossList', {}).fetch('GlossEntry', {}).fetch('ID', nil)
    
  • 不推荐的方案:异常捕获
    虽然可以用begin-rescue捕获NoMethodError实现需求,但异常捕获适合处理意外错误,不适合作为正常业务逻辑的判断分支,会掩盖其他潜在代码问题,因此不推荐使用。

内容的提问来源于stack exchange,提问作者Meeo Meo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:06:00