при сохранении json в файле появляются лишние символы. python
имеется примерная такая html страница, внутри которой есть json. При сохрании в файл, появляется символ переноса строки \n и экранируются элементы.
from bs4 import BeautifulSoup
import json
html_block = str('''<div class="microformat"><script type="application/ld+json">[{"@context":"http://schema.org","@type":"MusicEvent","name":"Artist"}]</script></div>''')
soup = BeautifulSoup(html_block, "html.parser")
js = soup.find("script", type="application/ld+json").text
get_json = (json.dumps(json.loads(js), indent=4, ensure_ascii=False))
print(get_json)
with open("data.json", mode="w") as json_file:
json.dump(get_json , json_file)
При выводе на экран все красиво:
[
{
"@context": "http://schema.org",
"@type": "MusicEvent",
"name": "Artist"
}
]
Но файл выглядит вот:
"[\n {\n \"@context\": \"http://schema.org\",\n \"@type\": \"MusicEvent\",\n \"name\": \"Artist\"\n }\n]"
Если убрать indent=4, то и \n пропадает. Как можно сохранить файл, что бы он внутри выглядел, так же красиво, как при выводе на экран?
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Вы два раза делаете преобразование.
В get_json у вас уже строка со сформированным json-ом. Второй раз делать json.dump не нужно. Просто пишите в файл:
with open("data.json", mode="w")
json_file.write(get_json)
Или не делайте сохранения в строку, а сразу пишите в файл:
js = soup.find("script", type="application/ld+json").text
with open("data.json", mode="w") as json_file:
json.dump(json.loads(js), json_file, indent=4, ensure_ascii=False)