当打开一个基本的json文件时,Python json解码错误。

问题描述 投票:0回答:1

我遇到了一个问题,打开一个很基本的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"
    }  
    ]
}

任何帮助非常感激,谢谢你!

python json decode
1个回答
0
投票

我敢肯定,你的 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
© www.soinside.com 2019 - 2024. All rights reserved.