I was trying to check if objects were JSON serializable or not because I had a dictionary that had a bunch of things and at this point its just easier to loop through its keys and find if they are JSON serializable and remove them. Something like (though this checks if its function):
def remove_functions_from_dict(arg_dict):
'''
Removes functions from dictionary and returns modified dictionary
'''
keys_to_delete = []
for key,value in arg_dict.items():
if hasattr(value, '__call__'):
keys_to_delete.append(key)
for key in keys_to_delete:
del arg_dict[key]
return arg_dict
is there a way that the if statement instead check for JSON serializable objects and deletes them from the dictionary in a similar way to above?
@shx2's answer is good enough, but it's better to specify which exceptions you're catching.
def is_jsonable(x):
try:
json.dumps(x)
return True
except (TypeError, OverflowError):
return False
OverflowError is thrown when x contains a number which is too large for JSON to encode. A related answer can be found here.
Easier to Ask Forgiveness than Permission.
import json
def is_jsonable(x):
try:
json.dumps(x)
return True
except:
return False
Then in your code:
for key,value in arg_dict.items():
if not is_jsonable(value):
keys_to_delete.append(key)