为啥在replit中删除列表时json会出错

Posted

技术标签:

【中文标题】为啥在replit中删除列表时json会出错【英文标题】:Why json has an erroe when deleted a list in replit为什么在replit中删除列表时json会出错 【发布时间】:2021-12-27 06:27:24 【问题描述】:

我试图删除 json 文件内的列表中的单个索引


文件


   "0": [
      "0",
      "1",
      "2",
      "3"
   ]


计划

import json
with open("main.json","r") as jsonfile:
  jsonfile = json.load(jsonfile)
key = "0"

index = int(input("which index u want to remove: "))

with open("main.json","r+") as f:
  if key in jsonfile:
    #jsonfile[key].append(str(index))

    del jsonfile[key][index]
    
    json.dump(jsonfile,f,indent=3)

这是程序删除索引后的样子:

请说出如何解决这个问题。我正在使用 repl.it

【问题讨论】:

r+ 不会截断文件。您一直在覆盖开头,但结尾仍留在文件中。 【参考方案1】:

错误在于应该是“w”的“r+”:

import json
with open("main.json","r") as jsonfile:
  jsonfile = json.load(jsonfile)
key = "0"

index = int(input("which index u want to remove: "))

with open("main.json","w") as f:
  if key in jsonfile:
    #jsonfile[key].append(str(index))

    del jsonfile[key][index]
    
    json.dump(jsonfile,f,indent=3)

在 replit.com 上工作,我知道,因为那是我使用的。

【讨论】:

问题是 r+ 附加并且不是最干净的选项。【参考方案2】:

将“r+”改成“w”重新写入整个文件。

with open("main.json","w") as f:
  if key in jsonfile:
    #jsonfile[key].append(str(index))

    del jsonfile[key][index]

    json.dump(jsonfile,f,indent=3)

【讨论】:

【参考方案3】:

问题在于保存文件。首先,使用"w" 而不是"r+",因为您没有在阅读。其次,要保存它,只需使用:

f.write(json.dumps(jsonfile))

见:Delete an element in a JSON object

【讨论】:

好的让我试试谢谢

以上是关于为啥在replit中删除列表时json会出错的主要内容,如果未能解决你的问题,请参考以下文章

从 SwiftUI 列表和领域中删除记录时出错

当我所做的只是一个列表时,为啥 Hibernate 会删除我的集合条目?

在flutter中解析嵌套的JSON列表时出错

Spotify API:将曲目添加到播放列表:解析 JSON 时出错

Spotify API 创建播放列表返回 错误: 状态:400,消息:'解析 JSON 时出错。'

在颤振中使用列表视图搜索数据时出错