如何在Python中按嵌套键值过滤JSON数组
过滤包含指定customerKey的JSON数组元素
改进后的代码实现
def filter_by_customer_key(main_array, target_key): filtered = [] for obj in main_array: # 优先检查一级字段的customerKey if obj.get('customerKey') == target_key: filtered.append(obj) continue # 检查嵌套errorsArray中的customerKey(利用errorsArray内key一致的特性) errors_array = obj.get('errorsArray', []) if errors_array and errors_array[0].get('customerKey') == target_key: filtered.append(obj) # 空数组场景返回空列表,若需保持原逻辑返回[{}]可替换为 return filtered if filtered else [{}] return filtered if filtered else [] # 使用示例 target_key = "UUID-1" filtered_result = filter_by_customer_key(mainArray, target_key)
逻辑说明
- 遍历数组对象时,先检查一级字段的
customerKey是否匹配目标值,匹配则直接加入结果集合 - 若一级字段无匹配,取出对象的
errorsArray(默认空列表),根据补充说明中“errorsArray内不会出现不同的customerKey”,只需验证数组中第一个元素的customerKey即可,匹配则将当前对象加入结果 - 空数组处理:默认返回空列表(更符合常规数据逻辑),若需保持原代码返回
[{}]的行为,可调整最后一行的返回逻辑
示例验证
- 无错误场景输入
"mainArray": [ { "errorsArray": [], "errorCode": "0", "customerKey": "UUID-1" }, { "errorsArray": [], "errorCode": "0", "customerKey": "UUID-2" } ]
输出:仅保留含UUID-1的第一个对象
- 有错误场景输入
"mainArray": [ { "errorsArray": [ { "customerKey": "UUID-1", "description": "error desc", "errorCode": "1" }, { "customerKey": "UUID-1", "description": "error desc", "errorCode": "2" } ], "errorCode": "1" }, { "errorsArray": [], "errorCode": "0", "customerKey": "UUID-2" } ]
输出:保留第一个含嵌套UUID-1的对象
内容的提问来源于stack exchange,提问作者thankYou
相关产品推荐
相关产品推荐

