繁体   English   中英

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

[英]Flatten nested json and get keys and nested keys in 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())

我该如何修改这个 function 所以我得到这个? 您会注意到我不想要最后一个键 Name,因为它在我的示例文本中不存在: (AdditionalInfo_Name,Field1,Field2,Field3)

不完全清楚你在追求什么,但使用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'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM