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

如何在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即可,匹配则将当前对象加入结果
  • 空数组处理:默认返回空列表(更符合常规数据逻辑),若需保持原代码返回[{}]的行为,可调整最后一行的返回逻辑

示例验证

  1. 无错误场景输入
"mainArray": [
    {
        "errorsArray": [],
        "errorCode": "0",
        "customerKey": "UUID-1"
    },
    {
        "errorsArray": [],
        "errorCode": "0",
        "customerKey": "UUID-2"
    }
]

输出:仅保留含UUID-1的第一个对象

  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:10:34