2017-02-03 67 views
5

我试图检查对象是否是JSON序列化或不是因为我有一个字典,有一堆的东西,在这一点上它只是更容易循环通过它的键,并发现它们是否是JSON序列化并删除它们。喜欢的东西(虽然这检查其功能):有没有一种简单的方法来检查对象是否可以在python中使用JSON序列化?

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 

是有办法的if语句,而不是检查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

相关问题