Suppose I have a json file like -
{
"course": "hwjxh",
"school_id": 1234,
"name_list": [
{
"name": "xyzzy",
"marks": 97
},
{
"name": "abc",
"marks": 44
},
{
"name": "qwe",
"marks": 78
},
{
"name": "def",
"marks": 90
},
{
"name": "jkl",
"marks": 80
},
{
"name": "abc",
"marks": 78
}
],
"course_id": "567",
"s_name": "abc public school"
}
This is a single object. There are hundreds of objects similar to these. What i did was I accessed every 'name' from "name_list" and cleaned it using some rules. In that process some common name were removed. Now I want to update the cleaned data back to the json file. Note that if the common name is filtered then while updating the data back to json file the corresponding marks should also be removed. Can someone help me out on this? I have these json objects in a single file, which I opened using 'smart_open' library.
Let me show you with an example how you can do this:
import json
def check_name(name):
if 'xyz' in name: #define the name filter here, this example filters out names with xyz
return False
#elif 'something' in name: #optionally more filters
# return False
else:
return True
with open("filename.json") as f:
data = json.load(f) #load json as python dictionary
data['name_list'] = [i for i in data['name_list'] if check_name(i['name'])] #pass the name_list items to the filter function and keep only those items that return True
json.dump(data, open("filename.json", "w")) #save back to json