我一直在使用以下内容将信息附加到JSON响应中。
for result in results:
if result["status"] == "OK":
for route, origincoord in izip(results, origincoords):
route['routes'][0]['legs'][0][u'_sent_origin'] = origincoord
origincoords是坐标列表。原始数量等于我拥有的JSON词典数量。
假设返回的JSON响应有效(即#34; Status":' OK'),这样可以正常工作。
但是,如果由于某种原因它不是(例如,Unknown_Error,Not_Found等),则上述将失败,因为相关的origincoords无法与其相关的JSON响应配对。 1.数据的完整性丢失,2。原始数据库中没有等量的JSON字典,因此引发了索引错误,并且无法通过给出的路径插入数据的位置[' routes& #39;] [0] [' leg'] [0] [u' _sent_origin']因为它在状态时不存在!=" OK"退回。
我已尝试以下方法来克服这个问题 -
for result in results:
for route, origincoord in izip(results, origincoords):
if result["status"] == "OK":
route['routes'][0]['legs'][0][u'_sent_origin'] = origincoord
if result["status"] != "OK":
route[u'_sent_origin'] = origincoord
然而,这也会返回IndexError
route['routes'][0]['legs'][0][u'_sent_origin'] = origincoord
IndexError: list index out of range
如何在出现错误的JSON响应场景中维护附加信息对JSON响应的完整性?
EDIT。我期望的结果。
在此示例中,第一个结果具有未知错误,第二个结果为OK,第三个结果具有未知错误。
origincoords = ['51.51964085,-0.092434321',
'51.51963442,-0.092433965',
'51.52208762,-0.095990014']
results = [{u'routes': [], u'status': u'UNKNOWN_ERROR'},
{u'routes': [{u'bounds': {u'northeast': {u'lat': value,
u'lng': value},
u'southwest': {u'lat': value,
u'lng': value}},
u'copyrights': u'value',
u'overview_polyline': {u'points': u’value’},
u'summary': u’value’,
u'warnings': [],
u'waypoint_order': []}],
u'status': u'OK'},
{u'routes': [], u'status': u'UNKNOWN_ERROR'}]
我想将第一组原始线对与第一个JSON响应配对,第二组与第二个JSON响应等配对。
因此
results = [{u'routes': [], u'status': u'UNKNOWN_ERROR', u'_sent_origin': '51.51964085,-0.092434321'},
{u'routes': [{u'bounds': {u'northeast': {u'lat': value,
u'lng': value},
u'southwest': {u'lat': value,
u'lng': value}},
u'copyrights': u'value',
u'overview_polyline': {u'points': u’value’},
u'summary': u’value’,
u'warnings': [],
u'waypoint_order': []}],
u'status': u'OK',
u'_sent_origin': '51.51963442,-0.092433965'}],
{u'routes': [], u'status': u'UNKNOWN_ERROR', u'_sent_origin': '51.52208762,-0.095990014'}]
答案 0 :(得分:1)
我从您发布的代码段中看不到您的完整设置,但似乎您需要在迭代izip
之前检查状态。
for result in results:
if result["status"] == "OK":
for route, origincoord in izip(results, origincoords):
route['routes'][0]['legs'][0][u'_sent_origin'] = origincoord
else
for route, origincoord in izip(results, origincoords):
route[u'_sent_origin'] = origincoord
答案 1 :(得分:1)
我做了两个循环而不是一个!
解决方案 -
for route, origincoord in izip(results, origincoords):
if route["status"] == "OK":
route['routes'][0]['legs'][0][u'_sent_origin'] = origincoord
else:
route[u'_sent_origin'] = origincoord
我不需要做两个循环。我正在做的结果是'并且'用于路由,izip中的origincoord(结果,起源线):'