当前位置: 首页 > news >正文

json取值,如果字段不存在,匹配下一个字段

需求

json取值,如果字段不存在,匹配下一个字段

mem_mod_current_frequency = re[“mem_mod_cur_frequency”]
# 厂商
mem_mod_vendor = re[“mem_mod_vendor”]

两种不同型号的设备可能存在:mem_mod_cur_frequency 和 mem_mod_frequency 字段
不想开发2个模板

在 JSON 数据处理中,安全地获取可能不存在的字段值的最佳方法是使用 get() 方法或 try-except 块。以下是几种安全取值的方法:

1. 使用 dict.get() 方法(推荐)

# 获取内存频率,如果字段不存在则返回 None
mem_mod_current_frequency = re.get("mem_mod_cur_frequency")# 获取厂商信息,如果字段不存在则返回 None
mem_mod_vendor = re.get("mem_mod_vendor")

2. 提供默认值

# 获取内存频率,如果字段不存在则返回默认值 0
mem_mod_current_frequency = re.get("mem_mod_cur_frequency", 0)# 获取厂商信息,如果字段不存在则返回默认字符串
mem_mod_vendor = re.get("mem_mod_vendor", "Unknown Vendor")

3. 尝试多个字段名(匹配下一个字段)

# 尝试多个可能的字段名获取内存频率
mem_mod_current_frequency = (re.get("mem_mod_cur_frequency") orre.get("current_frequency") orre.get("frequency") or0  # 最终默认值
)# 尝试多个可能的字段名获取厂商信息
mem_mod_vendor = (re.get("mem_mod_vendor") orre.get("vendor") orre.get("manufacturer") or"Unknown Vendor"  # 最终默认值
)

4. 使用 try-except

try:mem_mod_current_frequency = re["mem_mod_cur_frequency"]
except KeyError:try:mem_mod_current_frequency = re["current_frequency"]except KeyError:mem_mod_current_frequency = 0try:mem_mod_vendor = re["mem_mod_vendor"]
except KeyError:try:mem_mod_vendor = re["vendor"]except KeyError:mem_mod_vendor = "Unknown Vendor"

5. 封装为通用函数(最佳实践)

def get_nested_value(data, *keys, default=None):"""安全获取嵌套值,尝试多个键"""for key in keys:if isinstance(data, dict) and key in data:return data[key]return default# 使用示例
mem_mod_current_frequency = get_nested_value(re, "mem_mod_cur_frequency", "current_frequency", "frequency",default=0
)mem_mod_vendor = get_nested_value(re,"mem_mod_vendor","vendor","manufacturer",default="Unknown Vendor"
)

6. 使用第三方库(如 jmespath

import jmespath# 安装:pip install jmespathmem_mod_current_frequency = jmespath.search("mem_mod_cur_frequency || current_frequency || frequency || `0`",re
)mem_mod_vendor = jmespath.search("mem_mod_vendor || vendor || manufacturer || 'Unknown Vendor'",re
)

推荐方案

对于大多数情况,方法5(封装通用函数) 是最佳选择:

  • 代码简洁清晰
  • 支持多个备选字段
  • 可设置默认值
  • 可复用性高
def safe_get(data, *keys, default=None):"""安全获取值,尝试多个键"""for key in keys:if key in data:return data[key]return default# 使用示例
mem_mod_current_frequency = safe_get(re, "mem_mod_cur_frequency", "current_frequency", "frequency",default=0
)mem_mod_vendor = safe_get(re,"mem_mod_vendor","vendor","manufacturer",default="Unknown Vendor"
)

这种方法确保了即使 JSON 数据结构变化或字段名不一致,代码也能安全运行,避免 KeyError 异常。

http://www.dtcms.com/a/303331.html

相关文章:

  • 自定义View学习记录 plinko游戏View
  • 恒坤新材IPO被暂缓审议:收入确认法遭质疑,募资缩水约2亿元
  • 元宇宙经济与数字经济的异同:虚实交织下的经济范式对比
  • 基于Springboot的宠物救助管理系统的设计与实现
  • 【VUE3】搭建项目准备工作
  • 艾格文服装软件怎么用?
  • Windows中查看GPU和Cuda信息的DOS命令总结
  • AI产品经理手册(Ch1-2)AI Product Manager‘s Handbook学习笔记
  • uvm sequence Arbitration
  • AI 驱动、设施扩展、验证器强化、上线 EVM 测试网,Injective 近期动态全更新!
  • git stash apply 冲突合并方法解决
  • 希尔排序(缩小增量排序)面试专题解析
  • unisS5800XP-G交换机配置命令之登录篇
  • 洛谷 P10448 组合型枚举-普及-
  • Visual Studio Code使用
  • 25世界职业院校技能大赛国内赛区承办名单确定,各赛区需全力筹备
  • 【Spring Boot 快速入门】二、请求与响应
  • CGA围手术期:全周期保障老年手术安全
  • 基于深度学习的医学图像分析:使用YOLOv5实现细胞检测
  • TI 2025全国电赛猜题
  • 刘润探展科大讯飞WAIC,讯飞医疗AI该咋看?
  • 【重学数据结构】二叉搜索树 Binary Search Tree
  • LINUX 728 SHELL:grep;sort;diff
  • MOE 速览
  • python入门篇12-虚拟环境conda的安装与使用
  • 拷贝漫画网页入口 - Copymanga漫画官方网站及APP下载
  • 接⼝测试⾯试题汇总
  • YOLO目标检测总结
  • EXCEL怎么使用数据透视表批量生成工作表
  • 【深度学习】深入理解交叉熵损失函数 (Cross-Entropy Loss Function)