2017-02-03 33 views
5

Próbowałem sprawdzić, czy obiekty były serializowane JSON, czy nie, ponieważ miałem słownik, który miał kilka rzeczy i na tym etapie łatwiej jest przechodzić przez jego klucze i znaleźć, czy są serializowane JSON i je usunąć. Coś podobnego (choć sprawdza czy jego funkcji):Czy istnieje prosty sposób sprawdzenia, czy obiekt jest serializowany JSON w 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 

Czy istnieje sposób, że jeśli oświadczenie zamiast sprawdzać JSON serializować obiektów i usuwa je ze słownika w podobny sposób jak powyżej?

+1

Umieść 'try/catch' wokół wywołanie' json.dumps() '. – Barmar

+0

Czy rzeczywiście chcesz je usunąć lub po prostu nie zrzucić? – davidism

+0

@Davidism moim celem jest json zrzucić wszystko w słowniku, z wyjątkiem rzeczy, które nie są dumpable (json serializable). Ma sens? – Pinocchio

Odpowiedz

8

Łatwiej poprosić o przebaczenie niż zezwolenie.

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

Następnie w kodzie:

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

to zabawnie inteligentne, +1 do kreatywności na pewno. – Pinocchio