如何从JSON API中简单地捕获Python中的空列表?

问题描述:

我需要从一个JSON API响应返回一堆的SKU,但有时这是“空”:如何从JSON API中简单地捕获Python中的空列表?

{'products': [], 'request_speed': 0.0015690326690674} 

当有产品此代码的工作,但提出了一个IndexError时,有没有产品:

data = json.loads(r.text) 
print(data) 
if not data['products'][0]: 
    print("something") 
    for key in data['products']: 
     print(key['info']['sku']) 
else: 
    print("nothing") 

而这总是有“东西”,因为总有一个“产品” []在响应:

data = json.loads(r.text) 
print(data) 
if not data['products']: 
    print("something") 
    for key in data['products']: 
     print(key['info']['sku']) 
else: 
    print("nothing") 

我知道我可以增加一个尝试/除了第一个例子,但它似乎是一个圆形的房子方式实现的东西。

有没有更简便的方法来实现这一点?我确实认为:

if 'info' in data['products']: 

是pythonic的方式,但这总是返回“无”。

+1

你的检查是错误的。 '如果不是数据['products']:'应该是'如果data ['products']:'。 你也可以检查:'如果有的话(data ['products']):' –

+0

是的,如果你修复这个条件,第二次尝试应该可以工作。 – mkrieger1

检查其LEN,像这样:

data = json.loads(r.text) 

print(data) 

if len(data['products']) > 0: 
    print("something") 
    for key in data['products']: 
     print(key['info']['sku']) 

else: 
    print("nothing") 

if 'info' in r.text: 

也有效。哪个选项是最佳做法,我会标记为正确的?

你根本不需要做这个检查。

您可以简单地迭代空列表。如果有什么:

data = json.loads(r.text) 
for key in data['products']: 
    print(key['info']['sku']) 

编辑它不会做任何事情

如果要停止你的迭代:

if not data['products']: 
    break 
for key in data['products']: 
    print(key['info']['sku']) 
+0

除了这段代码在while循环遍历页面1,2等,所以我需要检查这是否是最后一个记录,因为API没有返回任何产品。 –

+0

如果不是数据['产品']:永远是真的,因为总是有产品,只是在没有任何产品时是空的清单。 –

+0

尝试在您的口译员上执行此操作: 'if not []:print('this list is empty')' –