Распарсить json в python

Рейтинг: 0Ответов: 1Опубликовано: 28.02.2023
import requests
import json

# Получаем HTML-код страницы
url = 'https://www.geooptic.ru/product/lasernyi-skanner-trimble-x7-kit-with-t10x'
response = requests.get(url).text
#html = response.content

# Ищем строку с информацией о файлах
start = 'files:['
end = '],'
start_index = response.index(start) + len(start)
end_index = response.index(end, start_index)
files_str = response[start_index:end_index]
print(files_str)

out:

{file_name:"obzor-skanerov-trimble.pdf",name:"Сравнение сканеров TRIMBLE X7, TX6, TX8 и тахеометра SX10 (2019 год)",type_id:eW},{file_name:"Trimble T10x tablet_Datasheet.pdf",name:"Trimble T10x tablet_Datasheet",type_id:4},{file_name:"Сравнение приборов Trimble 2022 X7 X12 SX12.pdf",name:"Сравнение приборов Trimble 2022 X7 X12 SX12",type_id:eW}

я хочу его распарсить:

# Извлекаем информацию о файлах
files_info = json.loads('[' + files_str + ']')

# Выводим результат
for file_info in files_info:
    print(f"{file_info['name']} : {file_info['file_name']}")'''

у меня выходить ошибка:

Возникло исключение: JSONDecodeError
Expecting property name enclosed in double quotes: line 1 column 3 (char 2)
  File "/home/artddss/python/em/de.py", line 18, in <module>
    files_info = json.loads('[' + files_str + ']')
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

Ответы

▲ 2Принят

Ошибка возникает потому, что строка files_str не является валидным JSON-объектом. В JSON-формате строки должны быть заключены в двойные кавычки, а не в одинарные.

Первый вариант решения: Замените строку files_info = json.loads('[' + files_str + ']') на files_info = json.loads('[' + files_str.replace("'", '"') + ']').

Второй вариант решения: Делаем следующую конструкцию

files_str = files_str.replace("'", '"')
files_info = json.loads('[' + files_str + ']')