无法让Python从Si解析JSON

2024-10-03 06:28:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图让我的Python脚本解析某个站点上特定json文件中的一些数据(价格),但我无法让它工作。 它可以很好地提取整个页面,但不能单独提取某些数据。你知道吗

以下是我试图从中提取数据的JSON:

[{
    "id": 1696146,
    "name": "Genos",
    "photo_url": "https://hobbydb-production.s3.amazonaws.com/processed_uploads/collectible_photo/collectible_photo/image/324461/1556082253-24867-7610/Genos_Vinyl_Art_Toys_60fb245b-1af9-4ad1-a5a2-c90d3e8291a6_medium.jpg",
    "preorder": false,
    "price": "$40.00",
    "price_after_discount": "$40.00",
    "seller_username": "BatmanPajamas",
    "url": "https://www.hobbydb.com/marketplaces/2/cart/1696146"
}]

下面是我获得的代码,它允许我获取整个json:

import urllib.request, json 
withurllib.request.urlopen("https://www.hobbydb.com/api/collectibles/for_sale_search?limit=5&original_site_id=10748&market_id=2") as url:
    data = json.loads(url.read().decode())
    print(data)

我尝试过各种代码,但每次我得到:

TypeError: list indices must be integers or slices, not str

你知道如何从这个JSON解析价格吗?你知道吗


Tags: 数据代码httpscomidjsonurlwww
3条回答

外括号([])表示响应返回项目列表。因此,您需要循环遍历列表的索引,然后您可以访问您试图访问的内容。下面是我如何使用requests

import requests

resp = requests.get("https://www.hobbydb.com/api/collectibles/for_sale_search?limit=5&original_site_id=10748&market_id=2")

#requests has built-in support for json, so no need to import json module
for product in resp.json():
    print(product["price"])

我认为您遇到的问题是因为这个JSON对象以一个数组开始(一旦我们将它作为Python对象加载,它将是一个列表)。首先,您需要使用标准库中的json库。然后,您必须使用列表索引,然后是dict键来访问对象。你知道吗

试试这个:

import urllib.request, json 
with urllib.request.urlopen("https://www.hobbydb.com/api/collectibles/for_sale_search?limit=5&original_site_id=10748&market_id=2") as url:
    data = json.loads(url.read().decode())
    print(data)
    toy = data[0]
    price = toy['price']

另外,请记住,with关键字创建了一个用于解析JSON数据的上下文,因此,一旦脚本转到此上下文之外的代码,您将无法再访问price变量,因此您可能需要将该值赋给或设置为在该上下文之外创建的另一个变量。你知道吗

迭代json数组:

for item in data:
    for keys in item.keys():
        print(item[keys])

仅显示价格

for item in data:
    print(item['price'])

相关问题 更多 >