如何使用python3将不断变化的模式json插入mysql?

2024-05-20 15:46:23 发布

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

我一直在使用python从API中提取数据,我从API中获取的数据是嵌套的json,所以当我第一次提取数据时,我会得到类似这样的数据

{
"id":4657,
"type":"Media",
"custom_fields":{
"regarding":"await",
"cf_arc":"nodetails",
"cf_bbv":"nodetails",
"cf_mcp":null,
"cf_tte":"nodetails",
"cf_pod":"nodetails",
"cf_mod":null,
},
"createddate":"2019-10-17T09:59:30Z",
"updateddate":"2019-10-17T09:59:30Z",
}

如果您看到自定义字段是嵌套的json,那么我想将这些嵌套的json放到每个字段的单列中。所以我把json放平,开始插入mysql数据库

def flatten_json(y):
    out = {}

    def flatten(x, name=''):
        if type(x) is dict:
            for a in x:
                flatten(x[a], name + a + '_')
        elif type(x) is list:
            # i = 0
            # for a in x:
            #     flatten(a, name + str(i) + '_')
            #     i += 1
            out[name[:-1]] = str(x)
            # print(x)
            # out[name[:-1]] = x
            # if len(x)==0:
            #   out[name[:-1]] = None
            # else:
            #   out[name[:-1]] = x
        else:
            out[name[:-1]] = x

    flatten(y)
    return out

我的问题是json模式在不断变化,列的顺序也在不断变化

"createddate":"2019-10-17T09:59:30Z",
"custom_fields":{
"regarding":"await",
"cf_arc":"nodetails",
"cf_bbv":"nodetails",
"cf_mcp":null,
"cf_tte":"nodetails",
"cf_pod":"nodetails",
"cf_mod":null,
},
"type":"Media",
"updateddate":"2019-10-17T09:59:30Z",
}

列顺序已经更改,所以当我展平json并尝试插入时会出错

我用google搜索了同一个问题,但是没有得到任何帮助,我正在使用python3和pymysql将数据插入mysql

任何帮助都将不胜感激


Tags: 数据nameapijsonfieldstypecustomawait