我需要解析其他工具生成的文件,这些工具无条件地输出带有UTF-8 BOM头文件(EFBBBF)的json文件。我很快发现这就是问题所在,因为Python2.7模块似乎无法解析它:
>>> import json
>>> data = json.load(open('sample.json'))
ValueError: No JSON object could be decoded移除BOM,解决了这个问题,但我想知道是否有其他方法可以解析带有BOM头的json文件?
发布于 2012-10-31 19:20:32
您可以使用codecs打开
import json
import codecs
json.load(codecs.open('sample.json', 'r', 'utf-8-sig'))或者自己使用utf-8-sig解码并传递给loads
json.loads(open('sample.json').read().decode('utf-8-sig'))发布于 2019-06-07 06:38:16
很简单!您甚至不需要导入codecs。
with open('sample.json', encoding='utf-8-sig') as f:
data = json.load(f)发布于 2012-10-31 19:21:33
由于json.load(stream)在幕后使用了json.loads(stream.read()),所以编写一个小的hepler函数来剥离BOM并不是件坏事:
from codecs import BOM_UTF8
def lstrip_bom(str_, bom=BOM_UTF8):
if str_.startswith(bom):
return str_[len(bom):]
else:
return str_
json.loads(lstrip_bom(open('sample.json').read())) 在其他需要包装流并以某种方式修复它的情况下,您可能会考虑从codecs.StreamReader继承。
https://stackoverflow.com/questions/13156395
复制相似问题