递归地提取嵌套的json键



我正试图从嵌套的JSON中提取键/值,以便将值插入SQL表中,其中键将是列名。这是我的数据样本:

json = {'inquiry_date': '2021-01-14',
'address': {'city': 'Warsaw',
'zip_code': '20-200',
'country': 'Poland',
'house_no': '22',
'street': 'Some-Street'},
'insert_date': '2020-12-20',
'is_active': False}

这是我的功能:

def extract(json):
for k, v in json.items():
if isinstance(v, dict):
extract(v)
else:
print(k, v) 

这给了我键值对的输出,但由于JSON是嵌套的,而且我不知道有多少级别和密钥可能是什么,我希望它显示为这样:

inquiry_date 2021-01-14
ADDRESS city Warsaw
ADDRESS zip_code 20-200
ADDRESS country Poland
ADDRESS house_no 22
ADDRESS street Some-Street
insert_date 2020-12-20
is_active False

关于这个有什么线索吗?

类似这样的东西:

#! /usr/bin/python3
json = {'inquiry_date': '2021-01-14',
'address': {'city': 'Warsaw',
'zip_code': '20-200',
'country': 'Poland',
'house_no': '22',
'street': 'Some-Street'},
'insert_date': '2020-12-20',
'is_active': False}
def parse_json(json,parents,n):
for k, v in json.items():
if isinstance(v, dict):
parse_json(v,parents+" "+k, n+1)
else:
print(parents, k, v)
parse_json(json,"",0)

给出:

inquiry_date 2021-01-14
address city Warsaw
address zip_code 20-200
address country Poland
address house_no 22
address street Some-Street
insert_date 2020-12-20
is_active False

我设法通过向函数添加额外的参数来解决这个问题,现在工作正常:

def extract(json, header):
for k, v in json.items():
if isinstance(v, dict):
extract(v, header + ' ' + k)
else:
print(header, k, v) 
for k, v in json.items():
if isinstance(v, dict):
extract(v, k)
else:
print(k, v)

最新更新