检查文件是否为json可加载

时间:2014-01-24 13:36:55

标签: python json

我有两种类型的txt文件,一种在表格

上以任意格式保存
Header
key1 value1
key2 value2

,另一个文件formart是一个简单的json转储存储为

with open(filename,"w") as outfile:
    json.dump(json_data,outfile)

在对话窗口中,用户可以加载这两个文件中的任何一个,但我的加载器需要能够区分type1和type2,并将文件发送到正确的加载例程。

#Pseudocode
def load(filename):
    if filename is json-loadable:
        json_loader(filename)
    else:
        other_loader(filename)

我能想到的最简单的方法是使用try / except块作为

def load(filename):
    try:
        data = json.load(open(filename))
        process_data(data)
    except:
        other_loader(filename)

但我不喜欢这种方法,因为在try / except块中有50/50的失败风险,据我所知,如果你失败,尝试/ except会很慢。

那么是否有一种更简单,更方便的方法来检查它是否是json格式的?

2 个答案:

答案 0 :(得分:1)

如果您要转储的顶级数据是对象,则可以检查第一个字符是{还是[(如果它是数组)。只有当其他格式的标题永远不会以这些字符开头时,这才有效。它也不是万无一失的,因为它不能保证您的数据形成良好的JSON。

另一方面,您现有的解决方案很好,更清晰,更健壮。

答案 1 :(得分:1)

您可以这样做:

def convert(tup):                                                               
    """                                                                            
    Convert to python dict.                                                        
    """                                                                            
    try:                                                                           
        tup_json = json.loads(tup)                                                 
        return tup_json                                                            
    except ValueError, error:  # includes JSONDecodeError                          
        logger.error(error)                                                           
        return None 


converted = convert(<string_taht_neeeds_to_be_converted_to_json>):
if converted:    
    <do_your_logic>
else:
    <if_string_is_not_converteble>