使用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