使用API​​,我以以下形式获得json字典作为响应:

{"transacDet":[{"field1":6933434802,"field2":323499903,"field3":293483842},
{"field1":693433448,"field2":333400300,"field3":298334300}],"responseStatus"
:{"statusMessage":"success","statusCode":0}}


我正在寻找在具有与json响应相同的对应字段的表中创建记录:field1,field2,field3。

从上面的示例中,我将获得2条记录:

field1 = 6933434802
field2 = 333400298
field3 = 298334842


接着:

field1 = 693433448
field2 = 333400300
field3 = 298334300


我必须反复回答,但不清楚如何做。

我尝试使用:

for k in resp_json.items()[0][1][0]:
print k


但我被困在那里。
TIA

最佳答案

仅使用标准库中的json模块,您可以轻松地按每个“行”的字段名称对它们进行迭代,如下所示:

#! /usr/bin/env
from __future__ import print_function
import json


JSON_TEXT = '''
{"transacDet":[{"field1":6933434802,"field2":323499903,"field3":293483842},
{"field1":693433448,"field2":333400300,"field3":298334300}],"responseStatus"
:{"statusMessage":"success","statusCode":0}}'''

resp_json = json.loads(JSON_TEXT)
for d in resp_json['transacDet']:
    for k in sorted(d.keys()):
        print(k, d[k])


产生:

field1 6933434802
field2 323499903
field3 293483842
field1 693433448
field2 333400300
field3 298334300


更新以概述如何将这些值推入INSERT调用:

# inside the loop instead of iterating over the fields in the
# dict / row at hand, one could easily for instance do:
resp_json = json.loads(JSON_TEXT)
for d in resp_json['transacDet']:
    insert_row(**d)


在这里,insert_row将是一个定义如下的函数(示例):

def insert_row(**kwargs):
    """Not production ready ;-)."""
    # pick up the row key-value pairs from dict
    list_of_tuples = [
        (k, kwargs[k] for k in sorted(kwargs.keys())]
    pass  # here you might use this list of (k, v) tuples

10-08 06:35
查看更多