2015-06-03 1 views
0

Я использовал следующее для добавления информации в ответ JSON.Добавление данных в ответ JSON в зависимости от кода состояния ответа 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 и т. Д.), То указанное выше не будет выполнено, поскольку соответствующие исходные слова не могут быть сопряжены с соответствующим JSON-ответом. 1. Целостность данных теряется и 2. не существует равного количества словарей JSON для исходных указателей, поэтому повышается погрешность индекса и 3. Местоположение для вставки данных невозможно с указанным путем [«маршруты»] [ 0] ['legs'] [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. Мой желаемый результат.

В этом примере первый результат имеет неизвестную ошибку, вторая - в порядке, а третья - неизвестная.

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

ответ

1

Я делал две петли вместо одной!

Solution -

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 

мне не нужно, чтобы сделать две петли. Я делал «для результата в результатах» и «для маршрута, origincoord в izip (результаты, originscoords): '

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 
+0

Спасибо @Kaz. Это все равно приводит к IndexError. Я добавил дополнительные подробности к моему вопросу в надежде сделать его более ясным – LearningSlowly

Смежные вопросы