raise JSONDecodeError("Expecting value", s, err.value)

При вызове json.loads() получаю ошибку

raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

структура json файла:

{
    "db": [
        {
          "message_id": 1156
        },
        {
          "message_id": 1155
        },
        {
          "message_id": 1154
        }
    ]
}

функция:

def cout():
    for i in json.loads("hist.json"):
        print(i)

cout()

Какие могут быть решения? Заранее спасибо.


Ответы (1 шт):

Автор решения: mrEvgenX

Судя по документации:

loads - принимает json в виде строки. Код ругается, что "hist.json" - это не json и ему не понять, что это.

load - загружает из файлового объекта. В конкретном случае надо так:

import json

def cout():
    with open('hist.json', 'r') as hist:
        for i in json.load(hist):
            print(i)

cout()

А еще JSON-формат ругается на лишние запятые. и поэтому в файле надо удалить последнюю запятую у последнего элемента списка.

PS: А loads используется так:

import json

def cout():
    for i in json.loads("""
    {
        "db": [
            {
            "message_id": 1156
            },
            {
            "message_id": 1155
            },
            {
            "message_id": 1154
            }
        ]
    }
    """):
        print(i)

cout()
→ Ссылка