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

Flask API代理如何实现JSON路径全层级大小写不敏感访问?

全层级大小写不敏感的嵌套JSON访问方案

要解决嵌套JSON(包含字典和列表)的全层级大小写不敏感访问问题,你可以自己实现递归转换逻辑,把整个JSON结构转换成自定义的大小写不敏感字典,同时处理列表中的嵌套字典元素。

实现代码

先定义一个大小写不敏感的字典类,再写递归转换函数处理整个嵌套结构:

class CaseInsensitiveDict(dict):
    def __getitem__(self, key):
        # 处理字符串键的大小写匹配
        if isinstance(key, str):
            for k in self.keys():
                if k.lower() == key.lower():
                    return super().__getitem__(k)
        # 非字符串键或无匹配时抛出KeyError
        raise KeyError(key)
    
    def get(self, key, default=None):
        # 兼容原生dict的get方法
        try:
            return self[key]
        except KeyError:
            return default
    
    def __contains__(self, key):
        # 兼容in操作符
        if isinstance(key, str):
            return any(k.lower() == key.lower() for k in self.keys())
        return super().__contains__(key)

def make_case_insensitive(data):
    """递归转换嵌套结构为大小写不敏感格式"""
    if isinstance(data, dict):
        insensitive_dict = CaseInsensitiveDict()
        for k, v in data.items():
            insensitive_dict[k] = make_case_insensitive(v)
        return insensitive_dict
    elif isinstance(data, list):
        # 遍历列表,转换其中的字典元素
        return [make_case_insensitive(item) for item in data]
    else:
        # 非字典/列表类型直接返回原值
        return data

在Flask中使用

接收POST请求后,将解析后的JSON数据传入转换函数,之后就能用任意大小写组合的键路径访问值:

from flask import Flask, request

app = Flask(__name__)

@app.route('/api/proxy', methods=['POST'])
def api_proxy():
    raw_json = request.json
    # 转换为全层级大小写不敏感结构
    insensitive_data = make_case_insensitive(raw_json)
    
    # 任意大小写组合都能取到值
    account_token = insensitive_data['orders']['authentication']['accounttoken']
    # 也可以混用大小写:insensitive_data['ORDERS']['Authentication']['AccountToken']
    
    # 后续逻辑:构造请求转发到后端API...
    return {'status': 'success', 'extracted_token': account_token}

关键特性说明

  • 全层级递归处理:无论嵌套多少层字典,或是列表中的字典元素,都会被转换成大小写不敏感格式
  • 兼容原生字典操作:支持[]取值、get()方法和in操作符,用法和普通字典完全一致
  • 冲突处理:如果存在多个键小写后完全相同(比如'AccountToken'和'accounttoken'同时存在),会返回第一个匹配的键对应的值,这种场景建议在业务逻辑中提前做去重校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:02:33