压扁嵌套的json并在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)

不完全清楚您想要什么,但使用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'])

最新更新