gpt4 book ai didi

python - 更新或编辑 json 文件时出现 Json 格式问题

转载 作者:行者123 更新时间:2023-12-01 03:27:02 24 4
gpt4 key购买 nike

我不明白为什么我的 json 文件带有 ekstra 括号。

这是我的 products.json 文件。右端有 2 个过多的括号。

{"products": {"27": {"price": 5, "pk": 27, "name": "gfasd", "amount": 3, "type": "sokker", "imageURL": "/media/gg_6A1aZ75.jpg"}}}}}

每当保存模型实例时,我都会使用 post_save 函数来更新 json 文件。

@receiver(post_save, sender=item, dispatch_uid="update_json")
def update_stock(sender, instance, **kwargs):
pk = str(instance.pk)
with open(MEDIA_ROOT + '/json/products.json', 'r+') as json_file:
products = json.loads(json_file.read())
print(products) <--- 1
products["products"].pop(pk, None)
print(products) <--- 2
products["products"][pk] = instance.returnAsJSON()
print(products) <--- 3
json_file.seek(0)
json_file.write(json.dumps(products))

打印输出为:

{'products': {'27': {'price': 123, 'type': 'sokker', 'name': 'gfasd', 'amount': 3, 'pk': 27, 'imageURL': '/media/gg_6A1aZ75.jpg'}}}
{'products': {}}
{'products': {'27': {'price': 5, 'pk': 27, 'name': 'gfasd', 'amount': 3, 'type': 'sokker', 'imageURL': '/media/gg_6A1aZ75.jpg'}}}

最后一个打印没有 2 个 ekstra 括号,所以我猜测它可能是我的函数的最后两行。但我真的不知道他们为什么这样做。

最佳答案

该问题可能与您保存文件的方式有关。您应该在 json_file.seek(0) 之后添加 json_file.truncate(),这样它会在保存新内容之前清理文件内容。

--

当你寻找0位置时,你只是改变了光标,但文件的内容仍然是相同的,所以如果文件中有更大的东西,它会保留在那里。
示例:

产品.json

{"foo":"bar"}

.

with open("products.json", "r+") as json_file:
json_file.seek(0)
json_file.write(json.dumps({"foo":"b"})) # Will write {"foo":"b"} to the file

products.json 文件内容将不是 {"foo":"b"} 生成的文件,而是 {"foo":"b"}"}

关于python - 更新或编辑 json 文件时出现 Json 格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41325861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com