【问题标题】:appending data to a list in a json file将数据附加到 json 文件中的列表
【发布时间】:2019-03-10 15:36:33
【问题描述】:

我正在制作一些东西来监控新产品的网站,所以我尝试将所有标题添加到一个以{"product_titles": []} 开头的 json 文件, 我试图弄清楚我们如何将包含产品标题和尺寸的字典添加到空列表中 这是我的代码

import requests
import json

url = 'https://www.supremenewyork.com/mobile_stock.json'
headers = {
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1',
    'Accept': 'application/json',
    'Accept-Encoding': 'br, gzip, deflate',
    'Accept-Language': 'en-us'
}


req = requests.get(url, headers=headers)#

page = req.json()
categories = page['products_and_categories']
Sweatshirts = categories['Sweatshirts']


product_list = []
for sweater in Sweatshirts:
    product_name = sweater['name']
    product_colors = []
    product_sizes = []
    product_stock_levels = []
    #print(product_name)
    raw_product_info = requests.get('https://www.supremenewyork.com/shop/' + str(sweater['id']) + '.json', headers=headers)
    product_info = raw_product_info.json()
    styles = product_info['styles']
    for style in styles:
        colors = style['name']
        full_product_name = product_name + colors
        file = open
        product_colors.append(colors)
        for size in style['sizes']:
            sizes = {size['name'] : size['stock_level']}
            product_sizes.append(sizes)
            with open('supreme.json', 'r+') as supremef:
                data = json.load(supremef)
                dump = json.dump(data['product_titles'].append({full_product_name: sizes}), supremef)


我尝试将其添加到 json 文件的列表中的最后几行,但没有将其添加到其中

【问题讨论】:

  • 请检查您是否向我们展示了整个代码,至少 requests 模块的导入似乎丢失了。
  • 我刚加进去,不知什么原因被删掉了
  • 您能否在使用 data['product_titles'].append({full_product_name: sizes}) 转储它之前验证 data 是否已正确更新?即检查'product_titles' 的列表是否按预期扩展?如果没有看到至高无上的 json,这很难调试 ;-)
  • .append() 添加项目但返回无。
  • 是的,这就是我遇到的问题,我试图弄清楚如何将它添加到 json 文件中的列表中

标签: python json file


【解决方案1】:

正如@t.m.adam 在 cmets 中指出的那样 - 这里有一点解释。

您希望append-操作返回整个对象,然后json.dump 应该保存该对象。

这个例子表明这不起作用,因为append 返回None

>>> mydict = {"items": [1,2,3,4]}
>>> type(mydict["items"].append(5))
<class 'NoneType'>
>>> print(mydict)
{'items': [1, 2, 3, 4, 5]}
>>> 

有关此行为的讨论,另请参阅 this question,我在 Python 文档中找不到此条目。

您的代码应该如下所示:

data = json.load(supremef)
data['product_titles'].append({full_product_name: sizes})
dump = json.dump(data, supremef)

题外话:

您的file = open 可能没有达到您的预期。

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 2021-03-27
    • 2016-08-14
    • 2018-05-14
    • 2012-10-11
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多