簡體   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