Python script to delete json objects from json file

你。 提交于 2021-02-11 12:23:13

问题


I have a file (my_file.json) has contents as below;

[
            {
                "use":"abcd",
                "contact":"xyz",
                "name":"my_script.py",
                "time":"11:22:33"
             },
            {
                "use":"abcd"
                "contact":"xyz",
                "name":"some_other_script.py",
                "time":"11:22:33"
             },
            {
                "use":"apqwkndf",
                "contact":"xyz",
                "name":"my_script.py",
                "time":"11:22:33"
             },
            {
                "use":"kjdshfjkasd",
                "contact":"xyz",
                "name":"my_script.py",
                "time":"11:22:33"
             }
]

I used following python code to delete the objects that has "name":"my_script.py",

#!/bin/usr/python

impoty json

obj = json.load(open("my_file.json"))

index_list = []

for i in xrange(len(obj)):
     if obj[i]["name"] == ["my_script.py"]
      index_list.append(i)

for x in range(len(index_list)):
      obj.pop(index_list[x])

open("output_my_file.json","w".write(json.dumps(obj, indent=4, separators=(',',': ')))

but it seems I am stuck, because after popping an index the index position in actual obj gets changed, which leads to wrong index deletion or sometimes pop index gets out of range. Any other solution?


回答1:


Try popping in reverse order:

for x in reversed(range(len(index_list))):



回答2:


This will create a new list and assign only those without "name": "my_script.py" to the new list.

obj = [i for i in obj if i["name"] != "my_script.py"]



回答3:


import json
with open('my_file.json') as f:
    data = json.load(f)

data = [item for item in data if item.get('name') != 'my_script.py']

with open('output_my_file.json', 'w') as f:
    json.dump(data, f, indent=4)



回答4:


Try:

    import json

    json_file = json.load(open("file.json"))

    for json_dict in json_file:
        json_dict.pop("name",None)
    print(json.dumps(json_file, indent=4))

You don't need the last line where it says 'json.dumps' I just have it there so it looks more readable when printed.




回答5:


As a general rule of thumb, you usually don't want to ever change an iterable while iterating over it. I suggest you save the elements you do want in the first loop:

import json

with open('path/to/file', 'r') as f:
    data = json.load(f)

items_to_keep = []
for item in data:
    if item['name'] != 'my_script.py':
        items_to_keep.append(item)

with open('path/to/file', 'w') as f:
    json.dump(items_to_keep, f, ...)

The filtering can be reduced into a single line (called list-comprehension)

import json

with open('path/to/file', 'r') as f:
    data = json.load(f)

items_to_keep = [item for item in data if item['name'] != 'my_script.py']

with open('path/to/file', 'w') as f:
    json.dump(items_to_keep, f, ...)


来源:https://stackoverflow.com/questions/64045853/python-script-to-delete-json-objects-from-json-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!