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

时间:2017-10-16 10:36:59

标签: python json list python-requests

我需要从JSON API响应返回一堆SKU,但有时候它是“空的”:

{'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")

我知道我可以在第一个例子中添加一个try / except,但它似乎是实现某些目标的方式。

是否有更简便的方法来实现这一目标?我确实想过:

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

是pythonic方式,但这总是返回“没有”。

3 个答案:

答案 0 :(得分:1)

您根本无需进行此项检查。

您可以简单地遍历空列表。如果什么都没有,它什么都不会做。:

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

答案 1 :(得分:0)

检查它的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")

答案 2 :(得分:0)

if 'info' in r.text:

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