繁体   English   中英

根据JSON响应的状态码将数据追加到JSON响应

[英]Appending data to JSON response depending on status code of JSON response

我一直在使用以下内容将信息附加到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是坐标列表。 origincoords的数量等于我拥有的JSON字典的数量。

假设返回的JSON响应有效(例如,“状态”:“确定”),此方法就可以正常工作。

但是,如果出于某种原因(例如,Unknown_Error,Not_Found等)并非如此,则上述操作将失败,因为相关的origincoords无法与其相关的JSON响应配对。 1.数据的完整性丢失,并且2.原始字典的JSON字典数量不相等,从而导致索引错误,并且3.使用给定的路径['routes'],无法插入数据。 0] ['legs'] [0] [u'_sent_origin'],因为返回状态==“确定”时将不存在。

我尝试了以下方法来克服这一点-

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响应的完整性?

编辑。 我想要的结果。

在此示例中,第一个结果具有未知错误,第二个结果正常,第三个结果具有未知错误。

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'}]

我想将第一组origincoords与第一个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'}]

从您发布的代码片段中,您还看不到您的完整设置,但是似乎需要在迭代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

我正在做两个循环,而不是一个!

解决方案-

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(结果,originscoords):”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM