展平嵌套json并获取python中的键和嵌套键

2024-05-06 03:33:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从json中提取键和嵌套键。以下是我的示例文本:

{"Field1":"a","Field2":"b","Field3":"c","AdditionalInfo":{"Name":"foo"}}

以下代码将嵌套键添加为嵌套键和常规键: (AdditionalInfo_Name,Field1,Field2,Field3,Name)

fields = []

def flatten_dict(d):
    def items():
        for key, value in d.items():
            if isinstance(value, dict):
                for subkey, subvalue in flatten_dict(value).items():
                    yield key + "." + subkey, subvalue
                    if (key + "." + subkey) not in fields:
                        fields.append(key + "." + subkey)
            else:
                yield key, value
                if key not in fields:
                    fields.append(key)

    return dict(items())

如何修改此函数,以获得此函数?您会注意到,我不需要最后一个键Name,因为它不存在于示例文本中: (AdditionalInfo_Name,Field1,Field2,Field3)


Tags: keynamein文本示例fieldsifvalue
1条回答
网友
1楼 · 发布于 2024-05-06 03:33:39

不完全清楚您想要的是什么,但是使用flatten_json库将为您提供平坦的字典,并且键非常容易

from flatten_json import flatten
data = {"Field1":"a","Field2":"b","Field3":"c","AdditionalInfo":{"Name":"foo"}}
flattened_dict = [flatten(d, '.') for d in [data]][0]
flattened_keys = [flatten(d, '.') for d in [data]][0].keys()


In [31]: flattened_dict
Out[31]: {'Field1': 'a', 'Field2': 'b', 'Field3': 'c', 'AdditionalInfo.Name': 'foo'}

In [32]: flattened_keys
Out[32]: dict_keys(['Field1', 'Field2', 'Field3', 'AdditionalInfo.Name'])

相关问题 更多 >