2017-10-16 5 views
0

私は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") 

私はtry/exceptを最初の例に追加することができると知っていますが、何かを達成するための家庭のように見えます。

これを達成するためのより簡略な方法はありますか?私は思った:

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

これは常に "何も返されませんでした。

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") 
+1

あなたのチェックが間違っています。 'data '[products'] ':データ[' products ']:'なら ''でなければなりません。 あなたは次の項目もチェックすることができます: 'もしあれば(データ['products']):' –

+0

はい、条件を修正すると、2回目の試行が有効です。 – mkrieger1

答えて

0

はこのように、そのLENを確認してください。どのオプションがベストプラクティスであり、正しいとマークしますか?

0
if 'info' in r.text: 

はまた働く:

1

このチェックはまったく必要ありません。

単純に空のリストを反復処理できます。 :

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

EDIT

何もない場合は、あなたの反復を停止する場合それは何もしません。

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

このコードはwhileループでページ1,2などを反復するため、APIが製品を返さないため、これが最後のレコードかどうかを確認する必要があります。 –

+0

データがない場合[製品]:常に商品があるので常に真となります。商品がない場合は空のリストになります。 –

+0

あなたのインタプリタでこれを実行しようとしてください: もしそうでなければ[]:print( 'このリストは空です') ' –

関連する問題