how to delete json object using python?
我正在使用python删除和更新一个由用户提供的数据生成的JSON文件,这样数据库中只存储很少的项目。我想从JSON文件中删除一个特定的对象。
我的JSON文件是:
1 2 3 4 5 6 7 8 9 10 | [ { "ename":"mark", "url":"Lennon.com" }, { "ename":"egg", "url":"Lennon.com" } ] |
我想删除带有
由于我对python不熟悉,我试图通过将对象转换为dict来删除它,但它不起作用。还有别的办法吗?我试过这个:
1 2 3 4 5 6 7 8 | index=0 while index < len(data): next=index+1 if(data[index]['ename']==data[next]['ename']): print"match found at" print"line %d and %d" %(next,next+1) del data[next] index +=1 |
下面是一个完整的示例,它加载JSON文件,删除目标对象,然后将更新后的JSON对象输出到文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/usr/bin/python # Load the JSON module and use it to load your JSON file. # I'm assuming that the JSON file contains a list of objects. import json obj = json.load(open("file.json")) # Iterate through the objects in the JSON and pop (remove) # the obj once we find it. for i in xrange(len(obj)): if obj[i]["ename"] =="mark": obj.pop(i) break # Output the updated file with pretty JSON open("updated-file.json","w").write( json.dumps(obj, sort_keys=True, indent=4, separators=(',', ': ')) ) |
主要的一点是,我们通过迭代加载列表中的对象找到对象,然后在找到对象后将其从列表中弹出。如果需要在列表中删除多个对象,那么应该存储要删除的对象的索引,然后在到达
JSON的正确方法是反序列化它,修改创建的对象,然后,如果需要,将它们序列化回JSON。为此,请使用JSON模块。简而言之,使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import json o = json.loads("""[ { "ename":"mark", "url":"Lennon.com" }, { "ename":"egg", "url":"Lennon.com" } ]""") # kick out the unwanted item from the list o = filter(lambda x: x['ename']!="mark", o) output_string = json.dumps(o) |
JSON文件包含在对象列表中,这些对象是Python中的字典。只需将列表替换为不包含对象的新列表:
1 2 3 4 5 6 7 8 | import json with open('testdata.json', 'rb') as fp: jsondata = json.load(fp) jsondata = [obj for obj in jsondata if obj['ename'] == 'mark'] print json.dumps(jsondata, indent=4) |
您需要使用
1 2 3 4 5 6 7 | import json json_data = json.loads('<json_string>') for i in xrange(len(json_data)): if(json_data[i]["id"] =="mark"): del json_data[i] break |
你有一个列表,上面有两个项目,恰好是字典。要删除第一个,可以使用
http://docs.python.org/2/tutorial/datastructures.html更多列表