Python解析方括号开头JSON文件仅返回[字符的解决方法
问题根因
你在保存JSON文件时做了两次序列化操作,导致文件里存储的是JSON字符串的序列化结果,而不是原始的数组结构:
- 第一次:
json_dump = json.dumps(json_obj)已经把Python数组转成了JSON格式的字符串 - 第二次:
json.dump(json_dump, outfile)又把上面得到的JSON字符串再次做了序列化,最终写入文件的是带转义符的字符串内容,不是正常的JSON数组
修复方案
有两种修改方式,二选一即可:
方案1:直接序列化Python对象到文件(推荐)
删掉json_dump = json.dumps(json_obj)这一行,直接把json_obj传入json.dump:
json_obj = [] for i in range(len(dictionary)): dataset, test, dir = retrieve_data() tp, fp, tn, fn = calculate_score() json_obj.append({ 'dataset': dataset, 'test': test, 'results': {'TP': tp, 'FP': fp, 'FN': fn, 'TN': tn}, 'dir': dir }) # 删掉多余的dumps步骤,直接dump原生的Python数组对象 with open(save_folder, 'w') as outfile: json.dump(json_obj, outfile, indent=2) # 加indent参数可以让JSON格式化输出,可读性更高
方案2:把序列化后的字符串直接写入文件,不用再次调用json.dump
如果需要保留json_dump字符串做其他用途,可以把json.dump改成普通的文件写入:
json_dump = json.dumps(json_obj, indent=2) with open(save_folder, 'w') as outfile: outfile.write(json_dump)
读取验证
修改保存逻辑后,你原来的读取代码就可以正常解析了:
with open(dir, 'r+') as f: data = json.load(f) print(data[0]) # 此时会输出数组的第一个对象,而不是字符串的第一个字符'['
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

