Python 如何检查JSON数组中是否存在值并继续循环
因此,我使用for循环来确定数组中是否存在特定的键。但到目前为止,我尝试的每一种方法都没有达到我想要达到的效果 我的代码如下所示:Python 如何检查JSON数组中是否存在值并继续循环,python,arrays,json,for-loop,keyerror,Python,Arrays,Json,For Loop,Keyerror,因此,我使用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
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\u info\u prdt['product']['metafields']['meta\u title\u nl']
,并不存在于我尝试循环的每个数组中。因此,有时if-else语句会起作用,并且会打印值。但有时值json\u info\u prdt['product']['metafields']['meta\u title\u nl']
根本不存在,给我一个KeyError
所以我想做的是获取所有返回KeyError
的产品ID,但我不希望循环停止,而是继续,直到它完成。所以我也不希望循环重新启动,因为这是毫无意义的
我的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\u title\u nl
存在于该值中,但有时它并不存在 用于捕获错误的if-else结构称为try-except。因此,您应该使用:
try:
print(json_info_prdt['product']['metafields']['meta_title_nl'])
except:
print(json_info_prdt['product']['id'])
您应该测试dict中是否存在密钥(如果有时可能不存在): 更改:
if json_info_prdt['product']['metafields']['meta_title_nl'] in json_info_prdt['product']['metafields']:
致:
妈的,我比我想象的要近,这很有效,谢谢!不客气。顺便说一句,在dict的非嵌套情况下,通常会使用get方法,如果缺少键,该方法提供了定义默认值的机会。但是,对于嵌套dict,您可能希望在阅读之前阅读此内容。
if 'meta_title_nl' in json_info_prdt['product']['metafields']: