我遇到了一个问题,打开一个很基本的json文件作为测试,我得到了以下的输出。
\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
这里是python代码:
import json
with open('test1.json') as f:
data = json.load(f)
print(data)
这里是test.json内容。
{ "Days" : [
{
"Date": "04-04-13",
"Price": "1.61"
},
{
"Date": "04-11-13",
"Price": "1.61"
}
]
}
任何帮助非常感激,谢谢你!
我敢肯定,你的 test1.json
文件包含一个 字节号. 使用 encoding
参数,用于 open()
功能. 使用你的文件的实际编码;如果我能够 猜测 UTF-8
,使用 encoding='utf-8-sig'
如下所示。
import json
path_to_file='D:\\Python\\SO3\\data\\test1.json'
with open(path_to_file, encoding='utf-8-sig') as f:
data = json.load(f)
print(data)
产出: D:\Python\SO3\61667193.py
{'Days': [{'Price': '1.61', 'Date': '04-04-13'}, {'Price': '1.61', 'Date': '04-11-13'}]}
说明:: 你可以 探测 真正的编码BOM使用以下方式 ivan_pozdeev的函数:
def detect_by_bom(path,default):
with open(path, 'rb') as f:
raw = f.read(4) #will read less if the file is smaller
for enc,boms in \
('utf-8-sig',(codecs.BOM_UTF8,)),\
('utf-16',(codecs.BOM_UTF16_LE,codecs.BOM_UTF16_BE)),\
('utf-32',(codecs.BOM_UTF32_LE,codecs.BOM_UTF32_BE)):
if any(raw.startswith(bom) for bom in boms): return enc
return default