Python 检查文件是否可加载json

Python 检查文件是否可加载json,python,json,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(file

我有两种类型的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的失败风险,据我所知,如果失败,try/except的速度很慢


那么,有没有更简单、更方便的方法来检查它的json格式呢?

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


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

您可以这样做:

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>
def转换(tup):
"""                                                                            
转换为python dict。
"""                                                                            
尝试:
tup_json=json.loads(tup)
返回tup_json
除ValueError外,错误:#包括JSONDecodeError
logger.error(错误)
一无所获
converted=convert():
如果转换:
其他:

“据我所知,如果失败,try/except会很慢。”--与从磁盘读取文件相比?确实不是。Python异常并不特别昂贵,而且在任何情况下,这听起来都像是过早的优化。的确,在这种情况下,速度不是真正的问题,而是使用try/except的问题。我读了try/except,看到这条评论说try/except实际上是encou我对Python非常着迷,所以也许我的代码现在还不错!