如何删除json中的对象

2024-09-30 14:18:53 发布

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

 "Admins": [
        {
            "Admin_name": "admin",
            "Admin_pass": "admin"
        },
        {
            "Admin_name": "administrator",
            "Admin_pass": "password"
        }
    ],
    "Teachers": [
        {
            "Name": "Yersin Zhanabekov",
            "Course": "Physical Culture",
            "Login": "Yersin.Zhanabekov",
            "Pass": "Yersin123",
            "Mark": null
        },
        {
            "Name": "Kayrat Mynbayev",
            "Course": "Theory of Probability and Mathematical Statistics",
            "Login": "Kayrat.Mynbayev",
            "Pass": "Kayrat123",
            "Mark": null
        },
        {
            "Name": "Magzhan Ikram",
            "Course": "Python",
            "Login": "Magzhan .Ikram",
            "Pass": "Magzhan123",
            "Mark": null
        },
        {
            "Name": "Mag",
            "Course": "Python",
            "Login": "Magzhan .Ikram",
            "Pass": "Magzhan123",
            "Mark": null
        }
    ], },
        {
            "Name": "Mag",
            "Course": "Python",
            "Login": "Magzhan",
            "Pass": "Magzhan123",
            "Mark": null
        }
    ],



with open('dict.json', 'r') as rf:
  dataRead = json.load(rf)


log = input("Your username: ")
pas = input("Your password: ")

for name in dataRead['Admins']:
  if log == name['Admin_name'] and pas == name['Admin_pass']:

    y = {'Name': "Hello"}
    dataRead['Teachers'][3]['Name'].pop()
    dataRead['Teachers'][3]['Name'].append(y)

    with open('dict.json', 'w') as rf:
      dataRead = json.dump(dataRead,rf)

我想删除对象名,并将其更改为新名称。使用pop().delete()

但不管怎样,我也犯了同样的错误

我该怎么办

错误是:

Traceback (most recent call last):

dataRead ['Teachers'] [3] ['Name']. pop () AttributeError: 'str' object has no attribute 'pop'

Tags: namejsonadminloginpasspopnullmark
3条回答

你应该这么做

dataRead['Teachers'][3]['Name'] = "Hello"

您还可以查看JSONPath表达式(使用像^{}这样的库)。它使您能够更灵活地浏览JSON对象。以下是一些例子:

更改特定元素的Name

from jsonpath_ng.ext import parser
for match in parser.parse("$.Teachers[?(@.Name=='Mag')]").find(x):
    match.value['Name'] = 'New'

从具有Name属性的元素中弹出Name

for match in parser.parse("$.Teachers[?(@.Name)].[*]").find(x):
    match.value.pop('Name')

Teachers

中的所有节点设置Name
for match in parser.parse("$.Teachers.[*]").find(x):
    match.value['Name'] = 'New name'

dataRead['Teachers']是一个列表。一旦您确定了列表中要删除的项目的索引(例如,3),那么dataRead(['Teachers'].pop(3)

相关问题 更多 >