Python中如何无反斜杠地美化输出JSON?
美化打印Script标签内的JSON并避免反斜杠
问题场景
执行以下代码获取script标签内的JSON时,输出为压缩状态:
from bs4 import BeautifulSoup import json html_doc = """ <script id="js-context" type="application/json">{"is_completed": false, "is_bookmarked": false, "api_article_bookmark_url": "/api/v1/articles/python-pretty-print/bookmark/", "api_article_completion_status_url": "/api/v1/articles/python-pretty-print/completion_status/"}</script> """ soup = BeautifulSoup(html_doc, 'html.parser') print(soup.find('script').get_text())
输出结果:
{"is_completed": false, "is_bookmarked": false, "api_article_bookmark_url": "/api/v1/articles/python-pretty-print/bookmark/", "api_article_completion_status_url": "/api/v1/articles/lorem-ipsum/"}
尝试直接用json.dumps()格式化时,输出出现大量转义反斜杠:
print(json.dumps(soup.find('script').get_text(), indent=4))
输出结果:
"{\"is_completed\": false, \"is_bookmarked\": false, \"api_article_bookmark_url\": \"/api/v1/articles/python-pretty-print/bookmark/\", \"api_article_completion_status_url\": \"/api/v1/articles/lorem-ipsum/\"}"
解决方法
问题根源是直接将JSON字符串传入json.dumps(),它会把字符串当作普通文本进行转义,而非解析为JSON对象。正确流程是:
- 先获取script标签内的JSON文本
- 用
json.loads()将文本解析为Python字典/列表 - 再用
json.dumps()对解析后的对象进行格式化输出
修正后的代码:
from bs4 import BeautifulSoup import json html_doc = """ <script id="js-context" type="application/json">{"is_completed": false, "is_bookmarked": false, "api_article_bookmark_url": "/api/v1/articles/python-pretty-print/bookmark/", "api_article_completion_status_url": "/api/v1/articles/python-pretty-print/completion_status/"}</script> """ soup = BeautifulSoup(html_doc, 'html.parser') # 获取JSON文本内容 json_text = soup.find('script').get_text() # 解析为Python数据结构 json_data = json.loads(json_text) # 格式化打印 print(json.dumps(json_data, indent=4))
执行后输出美化后的无反斜杠JSON:
{ "is_completed": false, "is_bookmarked": false, "api_article_bookmark_url": "/api/v1/articles/python-pretty-print/bookmark/", "api_article_completion_status_url": "/api/v1/articles/python-pretty-print/completion_status/" }
内容的提问来源于stack exchange,提问作者Arete
相关产品推荐
相关产品推荐

