递归提取嵌套的json键

2024-04-25 04:29:15 发布

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

我试图从嵌套的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

关于这个有什么提示吗


Tags: nojsonstreetcitydateaddresscodesome
2条回答

大概是这样的:

#! /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)

相关问题 更多 >