@RG2

Ошибка json.decoder.JSONDecodeError: Extra data: line 6 column 3 (char 308), как её решить?

Я создал программу, которая извлекает из двух сайтов (RBFR и RSCF) информацию, преобразуя её сперва в парсер JSON, а затем на основе этого превращает в таблицу в HTML. Для начала я написал два кода, которые извлекают информацию из сайтов, а потом программу, которая запускает оба кода, а затем преобразует объединённый парсер в таблицу
Первый код
Второй код
А вот собственно сама программа
import os
import threading
import json
import simplejson
from pandas import json_normalize
import psycopg2
from sqlalchemy import create_engine
from json2html import *


def execute_script(name):
    os.system('python ' + name)

#Execute a.py on a thread (concurrently)
a = threading.Thread(target=execute_script, args=('rscf.py',))
a.start()

#Execute b.py on a thread (concurrently)
b = threading.Thread(target=execute_script, args=('rbfr.py',))
b.start()

#Block main execution until a.py is terminated
a.join()
#Block main execution until b.py is terminated
b.join()

f1data = f2data = "" 
 
with open('out.json', encoding='utf-8') as f1:
    f1data = f1.read().replace("]", "").replace("[", "").strip() 
with open('out2.json', encoding='utf-8') as f2:
    f2data = f2.read().replace("]", "").replace("[", "").replace("Заявки не принимаются", "Конкурс завершен").strip()

f1data += "\n"
f1data += f2data
with open ('merged.json', 'a+', encoding='utf-8') as f3:
    f3.write(f1data)
    df = json_normalize(f3)

with open('merged.json', 'a+', encoding='utf-8') as hml:
    d = json.load(hml)
    scanOutput = json2html.convert(json=d)
    htmlReportFile = "merged.html"
    with open(htmlReportFile, 'w', encoding='utf-8') as htmlfile:
        htmlfile.write(str(scanOutput))
        print("OK")


Увы, код выдает следующую ошибку:
Traceback (most recent call last):
  File "C:\Download\postgresql\main.py", line 41, in <module>
    d = json.load(hml)
  File "C:\Users\Руслан\AppData\Local\Programs\Python\Python311\Lib\json\__init__.py", line 293, in load
    return loads(fp.read(),
  File "C:\Users\Руслан\AppData\Local\Programs\Python\Python311\Lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:\Users\Руслан\AppData\Local\Programs\Python\Python311\Lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\Руслан\AppData\Local\Programs\Python\Python311\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)
  • Вопрос задан
  • 377 просмотров
Решения вопроса 2
Ну кривой у вас какой-то JSON получается. Не видя его мы вам ничем помочь не в состоянии.

.replace("]", "").replace("[", "")
Как минимум тут вы его портите, если внутри есть массивы.
Ответ написан
@o5a
Основная проблема здесь:
with open('merged.json', 'a+', encoding='utf-8') as hml:
    d = json.load(hml)

Пытаетесь открыть файл для добавления данных и одновременно считать из него.
Когда файл открывается "a+", указатель помещается в самый конец файла. Поэтому при считывании из него последующим json.load(hml) данных просто не будет (даже если файл что-то и содержит, т.к. указатель в самом конце). Поэтому и возвращается эта ошибка, что json некорректный.
Можно это поправить, если после открытия файла перемотать указатель в его начало, добавив перед json.load строку
hml.seek(0)
Но вообще в целом по структуре всего кода, лучше не пытаться с json файлами работать путем их дописывания.
Лучше
1. Сначала полностью считать исходный файл в свой список/словарь
2. Сделать изменения/дополнения именно в этом списке
3. В конце записать уже полные данные с нуля в файл .json
Тогда и ошибок будет меньше, и не понадобится изобретать костыли в виде replace("]", "")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 19:31
500 руб./за проект
21 нояб. 2024, в 19:28
200000 руб./за проект
21 нояб. 2024, в 19:09
5000 руб./за проект