python - 当我使用 python 从 json 中的数组中删除一个对象时,它会破坏我的 json 文件。我该如何解决?
问题描述
当我使用 python 从 json 中的数组中删除一个对象时,它会破坏我的 json 文件。例如这里是我的蟒蛇:
srs = server["purchaseableRoles"]
if srs == []:
await ctx.send("Your server has no purchaseable roles at the moment, you cant remove one.")
else:
for i in srs:
splitsrs = i.split("|")
if int(splitsrs[0]) == role.id:
print(str(i))
srs.remove(str(i))
print(srs)
f.seek(0)
json.dump(serversjson,f,sort_keys=True,indent=4)
await ctx.send("removed the role from the role shop!")
(请忽略 discord.py 的东西,它在一个不和谐的机器人中。也忽略奇怪的缩进,我不知道为什么它会这样粘贴)该代码几乎是从 json 文件中的数组中删除一个对象,并更新它。除了当我这样做时,这是我的 json:
{
"servers": [
{
"id": 1234,
"purchaseableRoles": [
"1234|5678"
]
},
{
"id": 813070255127396352,
"purchaseableRoles": []
}
]
}071595911774238|5"
]
}
]
}
一切都搞砸了。这是我在搞砸之前的 json:
{
"servers": [
{
"id": 1234,
"purchaseableRoles": [
"1234|5678"
]
},
{
"id": 813070255127396352,
"purchaseableRoles": [
"813071595911774238|5"
]
}
]
}
有没有办法防止这种情况?如果您提供帮助,请提前致谢。
解决方案
您将文件光标移动到文件的开头,并用 JSON 字符串中的字节覆盖文件中的字节。
但是你删除了一些东西,所以覆盖文件的字符串比文件中的字符串短。
所以在文件的末尾,一些旧字符串仍然存在。
有一个方法file_obj.truncate()
。但显然,Python3 中几乎没有关于它的文档。像这样的东西:
f.seek(0)
f.truncate()
推荐阅读
- ruby-on-rails - Ruby on Rails 使用 gem 'iex-ruby-client'
- kotlin - 如何在 Kotlin Desktop Compose 中触发 PC 键盘输入
- ios - 具有水平布局 ScrollTo 方法的 CollectionView 不起作用 Xamarin
- python - 减少moviepy处理时间
- javascript - 如何获取具有特定开头的文件,例如。FileOne .....%,FileTwo ...%nodejs中的名称?
- html - 如何在 Bootstrap 5 的下拉菜单中插入选项卡?
- angular - 如何在我们的自定义指令中以角度解码现有的结构指令字符串语法
- vba - 检查表中的值是否与 ArrayList 中的值匹配并以下一个形式显示它们
- json - 返回一个 json 编码属性作为在 laravel 中解码的 json
- javascript - 如何让 onclick 侦听器与 python 烧瓶一起工作