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

Python处理ndJSON替换键名适配API请求的更优雅实现咨询

优化实现方案

原有实现通过JSON序列化后字符串替换修改键名,既会产生额外的序列化/反序列化开销,还存在误替换字段值的风险,手动维护ID列表索引计数器的写法也较为冗余。以下是更符合Python习惯的实现:

import ndjson
import requests

# 统一维护字段映射关系,后续修改只需调整该字典
FIELD_MAPPING = {
    "ADDRESS_CITY": "city",
    "ADDRESS_LINE_1": "street",
    "ADDRESS_STATE": "state",
    "ADDRESS_ZIP": "zipcode"
}

def process_addresses(addresses_raw, url):
    # 加载ndjson数据
    addresses = ndjson.loads(addresses_raw)
    
    # 一步完成ID提取、请求体构造
    ids, req_data = zip(*[
        (
            addr.pop("ID"),
            {
                **{new_k: addr[old_k] for old_k, new_k in FIELD_MAPPING.items()},
                "candidates": 1,
                # 此处可根据业务需求调整addressee的拆分逻辑,示例为拆分地址行取空格后内容
                "addressee": addr["ADDRESS_LINE_1"].split(maxsplit=1)[-1]
            }
        )
        for addr in addresses
    ])
    
    # 发起请求
    resp = requests.post(url, json=list(req_data))
    resp.raise_for_status() # 可选:增加异常捕获,请求失败时直接抛出异常
    resp_data = resp.json()
    
    # 批量回填ID
    for idx, item in enumerate(resp_data):
        item["ID"] = ids[idx]
    
    return resp_data

优化点说明

  • 用字典统一维护字段映射规则,无需硬写多个replace,后续维护成本更低
  • 直接操作字典构造请求体,省去了两次JSON序列化/反序列化的开销,处理1万条数据的效率提升明显
  • 通过列表推导式+zip解包一步完成ID提取和请求体构造,pop方法直接取出ID同时删除原字段,无需单独循环处理
  • 用enumerate内置函数遍历响应回填ID,不需要手动维护索引计数器,代码更简洁易读

内容的提问来源于stack exchange,提问作者0004

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:09:04