Как проверить, существует ли значение в массиве JSON и продолжить цикл - PullRequest
0 голосов
/ 25 августа 2018

Поэтому я использую цикл for, чтобы определить, существует ли определенный ключ в массиве.Но до сих пор каждый метод, который я пробовал, не работал для того, что я пытаюсь выполнить.

Мой код выглядит следующим образом:

for i in range(1,len(opslag)):
     info_product = 'https://examplesite.com/'+str(opslag[i])+'.json'
     info_get = session.get(info_product)
     text_info_prdt = info_get.text
     json_info_prdt =json.loads(text_info_prdt)
     if json_info_prdt['product']['metafields']['meta_title_nl'] in json_info_prdt['product']['metafields']:
        print(json_info_prdt['product']['metafields']['meta_title_nl'])
     else:
         print(json_info_prdt['product']['id'])

Так что значение в этом случае json_info_prdt['product']['metafields']['meta_title_nl'],не существует в каждом массиве, который я пытаюсь перебрать.Так что иногда оператор if else будет работать, и значение будет напечатано.Но иногда значение json_info_prdt['product']['metafields']['meta_title_nl'] вообще не существует и дает мне KeyError.

Итак, я хочу получить все идентификаторы продуктов, которые возвращают KeyError, но яне хочу, чтобы цикл прекратился, а продолжается до тех пор, пока он не закончится.Поэтому я также не хочу, чтобы цикл перезапускался сам по себе, потому что это бессмысленно.

Мой JSON выглядит следующим образом:

{
   product:{
      article_code:"",
      barcode:"",
      brand_id:null,
      created_at:"2017-07-07T12:49:23+02:00",
      data01:"",
      data02:"",
      data03:"",
      delivery_date_id:null,
      has_custom_fields:true,
      has_discounts:false,
      has_matrix:false,
      hits:0,
      hs_code:null,
      id:52847777,
      image_id:130661048,
      is_visible:true,
      price_excl:0,
      price_incl:0,
      price_old_excl:0,
      price_old_incl:0,
      product_set_id:383078,
      product_type_id:null,
      search_context:"",
      shop_id:240359,
      sku:"",
      supplier_id:null,
      updated_at:"2018-07-10T10:53:15+02:00",
      variants_count:4,
      visibility:"visible",
      weight:0,
      custom_fields:[

      ],
      variants:[

      ],
      product_relations:[

      ],
      product_categories:[

      ],
      product_discounts:[

      ],
      product_type:null,
      product_filter_values:[

      ],
      product_bundles:[

      ],
      metafields:{
         meta_title_nl:"Big House",
         meta_title_en:"cxzcxzcxz",
         meta_description_nl:"This is a big house"
      },
      supplier:null,
      product_images:[

      ],
      brand:null,
      delivery_date:null,
      image:{

      },
      nl:{

      },
      en:{

      },
      tags:null
   }
}

Как вы можете видеть, значение meta_title_nl существует в этом, но иногда оно не существует.

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Вы должны проверить, существует ли ключ в dict, если он иногда может отсутствовать:

Изменить:

if json_info_prdt['product']['metafields']['meta_title_nl'] in json_info_prdt['product']['metafields']:

на:

if 'meta_title_nl' in json_info_prdt['product']['metafields']:
0 голосов
/ 25 августа 2018

Структура if-else для перехвата ошибок называется try-exc. Поэтому вы должны использовать:

try:
    print(json_info_prdt['product']['metafields']['meta_title_nl'])
except:
    print(json_info_prdt['product']['id'])
...