2017-02-03 6 views
5

Я пытался проверить, были ли объекты JSON сериализуемыми или нет, потому что у меня был словарь, который имел кучу вещей, и в этот момент ему просто проще прокручивать его ключи и найти, являются ли они сериализуемыми JSON и удалять их. Нечто подобное (хотя это проверяет, если его функции):Есть ли простой способ проверить, является ли объект JSON сериализуемым в python?

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 

есть способ, что если оператор вместо проверки для JSON сериализуемых объектов и удаляет их из словаря аналогично выше?

+1

Помещенный 'попробовать/catch' вокруг вызова' json.dumps() '. – Barmar

+0

Вы действительно хотите удалить их или просто не сбрасывать их? – davidism

+0

@davidism Моя цель - json сбрасывать все в словаре, кроме вещей, которые не поддаются давлению (json serializable). Имеет смысл? – Pinocchio

ответ

8

Спрашивать прощение, чем разрешение.

import json 
def is_jsonable(x): 
    try: 
     json.dumps(x) 
     return True 
    except: 
     return False 

Затем в коде:

for key,value in arg_dict.items(): 
    if not is_jsonable(value): 
     keys_to_delete.append(key) 
+0

, который смешно умный, +1 для творчества наверняка. – Pinocchio