影刀RPA 多层嵌套JSON的通用解析套路

📅 2026/7/14 18:23:24
影刀RPA 多层嵌套JSON的通用解析套路
影刀RPA 多层嵌套JSON的通用解析套路作者林焱什么情况用这个API返回的JSON数据经常嵌套了好几层——列表里有字典、字典里又有列表、关键字段还在数组第3层的某个对象里。新手通常的做法是一层层用中括号往下取data[result][list][0][detail][price]——这行代码最怕的就是中间某层不存在一报错整个流程崩了。这篇文章给你一套通用的JSON解析方法安全地提取深层嵌套数据不怕中间缺层、不怕格式变化。怎么做拼多多店群自动化报活动上架安全取值函数defsafe_get(data,*keys,defaultNone): 安全地从嵌套字典/列表中取值 safe_get(data, result, list, 0, price) forkeyinkeys:try:ifisinstance(data,list)andisinstance(key,int):datadata[key]elifisinstance(data,dict):datadata[key]else:returndefaultexcept(KeyError,IndexError,TypeError):returndefaultreturndata# 使用pricesafe_get(response,data,items,0,price,default0)批量提取嵌套数组中的字段defextract_field_from_list(data,*path,defaultNone): 从嵌套结构中提取列表中每个元素的指定字段 extract_field_from_list(data, data, items, price) 相当于: [item[price] for item in data[data][items]] # 先走到列表那一层list_datasafe_get(data,*path[:-1],default[])fieldpath[-1]![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9bdd22d9a44e4c1ca04b9c1bba54adf2.png#pic_center)results[]foriteminlist_data:ifisinstance(item,dict):results.append(item.get(field,default))else:results.append(default)returnresults递归搜索——不知道key在哪层defdeep_search(data,target_key):递归搜索嵌套结构中所有匹配的keyresults[]ifisinstance(data,dict):forkey,valueindata.items():ifkeytarget_key:results.append(value)results.extend(deep_search(value,target_key))elifisinstance(data,list):foritemindata:results.extend(deep_search(item,target_key))returnresults# 不管price在JSON的哪一层全找出来pricesdeep_search(response,price)有什么坑坑一数据类型不固定现象API有时候返回list: [...]有时候返回list: None。for item in None直接报错。解决所有列表操作前加保护for item in (data_list or [])。坑二数值被当成字符串返回TEMU店群矩阵自动化运营核价报活动现象{price: 199.00}和{price: 199.0}在不同请求中可能交替出现。解决取值后统一转换price float(safe_get(item, price, default0))。坑三key的大小写不一致现象有的API返回UserName有的返回username。解决写一个忽略大小写的取值函数defsafe_get_case_insensitive(d,key,defaultNone):key_lowerkey.lower()fork,vind.items():ifk.lower()key_lower:returnvreturndefault总结多层JSON解析的核心就一条——不要假设任何一层一定存在。用safe_get()替换所有的链式取值让你从偶尔崩溃变成永远不会因为缺数据崩溃。