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

如何修改flatten_data函数解析字符串内的JSON消息?

问题

现有以下Python扁平化函数flatten_data:

def flatten_data(json_data):
    """
    Arguments:
        json_data (dict): json data
    Returns:
        dict : {a:1, b:2, b_c:1, b_d:2}
    """
    out = {}

    def flatten(x, name=''):
        if type(x) is dict:
            for a in x:
                flatten(x[a], name + a + '_')
        elif type(x) is list:
            out[name[:-1]] = x
        else:
            out[name[:-1]] = x

    flatten(json_data)
    return out

传入如下JSON格式的输入数据时:

{
  "id": "123",  
  "name": "Jack",  
  "createdAt": 20221212,  
  "region": '{"country": "USA", "city": "NewYork"}'
}

需要得到如下扁平化后的输出结果:

{
  "id": "123",  
  "name": "Jack",  
  "createdAt": 20221212,  
  "region_country": "USA",
  "region_city": "NewYork"
}

请问应当如何修改该flatten_data函数,以实现将字符串形式的嵌套JSON也进行扁平化处理?

解决方案

要实现字符串形式嵌套JSON的扁平化,需要在函数中加入字符串JSON解析逻辑,尝试将符合JSON格式的字符串转为字典后再递归处理,同时兼容普通字符串的情况。修改后的函数如下:

import json

def flatten_data(json_data):
    """
    Arguments:
        json_data (dict): json data
    Returns:
        dict : {a:1, b:2, b_c:1, b_d:2}
    """
    out = {}

    def flatten(x, name=''):
        # 先尝试解析字符串形式的JSON
        if isinstance(x, str):
            try:
                # 替换单引号为双引号,符合JSON标准格式
                parsed = json.loads(x.replace("'", "\""))
                flatten(parsed, name)
                return
            except (json.JSONDecodeError, ValueError):
                # 解析失败,说明是普通字符串,继续后续流程
                pass
        
        if isinstance(x, dict):
            for a in x:
                flatten(x[a], name + a + '_')
        elif isinstance(x, list):
            out[name[:-1]] = x
        else:
            out[name[:-1]] = x

    flatten(json_data)
    return out

关键修改点

  • 导入json模块用于解析字符串JSON;
  • 在flatten函数开头增加字符串处理分支:对字符串尝试JSON解析,成功则递归处理解析后的字典,失败则按普通字符串存入结果;
  • 处理输入中用单引号包裹的JSON字符串,先替换为双引号以符合JSON标准格式;
  • 将原有的type(x) is dict改为isinstance(x, dict),类型判断更灵活,支持子类场景。

内容的提问来源于stack exchange,提问作者Ugur Selim Ozen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:45:33