Python访问biip库GS1解析结果嵌套对象指定ai属性方法
biip库解析GS1编码提取指定AI值的实现方案
核心属性访问规则
遍历result.gs1_message.element_strings返回的每一个GS1ElementString对象时,通过两层属性访问即可拿到AI编码字符串:单个元素对象.ai.ai。
其中第一层.ai返回嵌套的GS1ApplicationIdentifier实例,第二层.ai是该实例下存储的字符串类型应用标识符值(比如'01'、'15'、'10'),直接判断该值即可做分支处理。
完整实现代码
import biip # 执行GS1编码解析 parse_result = biip.parse("010703206980498815210526100329") element_strings = parse_result.gs1_message.element_strings # 遍历所有元素,按目标AI做分支处理 for elem in element_strings: current_ai = elem.ai.ai # 跳过非目标AI if current_ai not in {"01", "15", "10"}: continue if current_ai == "01": # AI=01对应GTIN全球贸易项目代码 gtin_raw = elem.value # 可直接访问结构化GTIN属性,无需自行解析 gtin_check_digit = elem.gtin.check_digit gtin_prefix_info = elem.gtin.prefix.usage print(f"GTIN编码:{gtin_raw},校验位:{gtin_check_digit},前缀归属:{gtin_prefix_info}") elif current_ai == "15": # AI=15对应最佳保质期,biip已自动解析为日期对象 best_before_raw = elem.value best_before_date = elem.date print(f"最佳保质期原始值:{best_before_raw},解析后日期:{best_before_date}") elif current_ai == "10": # AI=10对应批次号 batch_number = elem.value print(f"生产批次号:{batch_number}")
快捷取值方式
如果需要快速获取指定AI对应的元素,不需要每次循环判断,可以先生成AI到元素的映射字典,直接按键取值:
# 构建AI映射表 ai_lookup = {elem.ai.ai: elem for elem in element_strings} # 直接取值使用 gtin_value = ai_lookup["01"].value expire_date = ai_lookup["15"].date batch_no = ai_lookup["10"].value
注意事项
- 不要混淆对象层级:
elem.ai是应用标识符的配置对象,不是AI编码字符串本身,必须再取一层.ai属性才能拿到编码值 - 常用AI的结构化结果biip已经提前解析完成:日期类AI直接取
elem.date即可拿到datetime.date类型结果,GTIN/SSCC/GLN类编码分别存在对应的elem.gtin/elem.sscc/elem.gln属性中,不需要手动用正则拆分原始value - 如果待解析编码中存在重复AI(比如同一编码包含多个批次),上述字典映射方式只会保留最后一个匹配的元素,需要全量处理时请用遍历分支的方式
内容的提问来源于stack exchange,提问作者Shruti Singh
相关产品推荐
相关产品推荐

