Распарсить json в python
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 шт):
Автор решения: M141
→ Ссылка
Ошибка возникает потому, что строка 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 + ']')
Автор решения: Anikei
→ Ссылка
Ошибка говорит о том, что параметры словаря должна быть заключены в двойные кавычки - в вашем случаи таково нет. Для таково типа данных придется писать свой парсер.