json类型错误int对象不可订阅

时间:2018-06-02 07:26:41

标签: python

尝试搜索以查看库存中的数量是否高于0

https://www.astro-bot.io/api/commerce/inventory/stock/?crumb=BQXy6KNmMGWENWE3YWQzMTc3MDU5NzE1ODdkNDNiM2RmZTEyNjg4&itemId=5b0dc9172b6a283905dabe08

得到:

TypeError: 'int' object is not subscriptable

代码:

import requests
from bs4 import BeautifulSoup as bs4
from threading import Thread
import json

s = requests.session()

def checkstock():
    global session
    response = s.get('https://www.astro-bot.io/api/commerce/inventory/stock/?crumb=BQXy6KNmMGWENWE3YWQzMTc3MDU5NzE1ODdkNDNiM2RmZTEyNjg4&itemId=5b0dc9172b6a283905dabe08')
    data = json.loads(response.text)
    stock = data['results'][0]['qtyInStock'][0]['available']
    if stock in [0]:
        print("out of stock!")
    else:
        print("in stock")

checkstock()

3 个答案:

答案 0 :(得分:0)

data = json.loads(response.text)
stock = data['results'][0]['qtyInStock'][0]['available']

这应该是

data = json.loads(response.text)
stock = data['results'][0]['qtyInStock']

答案 1 :(得分:0)

您需要循环搜索结果,因为可能会有更多记录。 requests已经提供了一种将内容转换为json的简便方法。

编写代码的简单方法是:

def checkstock():
    global session
    response = s.get('https://www.astro-bot.io/api/commerce/inventory/stock/?crumb=BQXy6KNmMGWENWE3YWQzMTc3MDU5NzE1ODdkNDNiM2RmZTEyNjg4&itemId=5b0dc9172b6a283905dabe08')
    data = response.json()
    for results in data:
       if results['qtyInStock'] == 0:
          print('Out of stock')
       else:
          print('Available')

答案 2 :(得分:0)

 def checkstock():
     global session
     response = s.get('https://www.astro-bot.io/api/commerce/inventory/stock/?crumb=BQXy6KNmMGWENWE3YWQzMTc3MDU5NzE1ODdkNDNiM2RmZTEyNjg4&itemId
 =5b0dc9172b6a283905dabe08')
     data = json.loads(response.text)
     results = data.get('results',[{}])[0] 
     try:          
         qtyInStock = [{}] if (results['qtyInStock'] == 0) else results['qtyInStock']                                                          
     except TypeError:
        qtyInStock = [{}]
     stock = qtyInStock[0].get('available',0)
     print('in stock') if (stock != 0) else print('out of stock!')