根据JSON返回的状态码向JSON响应附加数据

2024-09-27 00:14:11 发布

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

我一直在使用下面的代码将信息附加到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响应是有效的(即“Status”:“OK”),这就可以正常工作。你知道吗

但是,如果由于任何原因(例如,未知错误、未找到等),上述操作将失败,因为相关的origincoords不能与其相关的JSON响应配对。1数据的完整性丢失,2。没有等量的JSON字典到origincoords,因此引发索引错误,3.给定路径['routes'][0]['legs'][0][u''sent\u 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

但是,这也会返回索引器错误

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

Tags: injsonforvaluestatus错误okorigin
2条回答

从您发布的代码片段中,我不清楚您的完整设置,但是您似乎需要在迭代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中的原始坐标(结果,原始坐标):”

相关问题 更多 >

    热门问题