Python json ошибка декодирования при открытии базового c json файла - PullRequest
0 голосов
/ 07 мая 2020

У меня проблема с открытием файла pretty basi c 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)

Вот тест. json содержимое:

{ "Days" : [
    {
        "Date": "04-04-13",
        "Price": "1.61"
    },
    {
        "Date": "04-11-13",
        "Price": "1.61"
    }  
    ]
}

Любая помощь очень ценится, спасибо!

1 Ответ

0 голосов
/ 02 июня 2020

Я почти уверен, что ваш 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'}]}

Примечание : Вы можете определить реальную кодировку / спецификацию, используя следующую функцию от 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
...