如何用Python将含类HTML元素的列表转换为嵌套JSON?
从类HTML列表生成嵌套JSON:入门指南与实现步骤
核心逻辑梳理
要完成这个需求,核心是先清理数据,再通过状态维护建立h5与h6的关联关系,具体分三步:
- 清理空记录:过滤掉内容为空的h5/h6标签
- 识别标签类型:提取h5(分类键)和h6(子项值)的文本内容
- 构建键值映射:遍历过程中维护当前分类,将后续h6归入对应分类下
实操代码示例(Python)
以常见的类HTML文本为例,直接可运行的实现:
import re import json # 示例输入的类HTML文本 html_text = """ <h5>分类A</h5> <h6>子项A1</h6> <h6>子项A2</h6> <h5>分类B</h5> <h6>子项B1</h6> <h5></h5> <h6>子项B2</h6> """ # 1. 提取有效标签内容,过滤空记录 # 正则分组匹配h5/h6标签,非贪婪匹配避免跨标签抓取 pattern = re.compile(r'<h([56])>(.*?)</h\1>', re.DOTALL) matches = pattern.findall(html_text) # 过滤掉内容为空的记录 filtered_items = [(tag, content.strip()) for tag, content in matches if content.strip()] # 2. 构建嵌套键值结构 result_dict = {} current_category = None for tag, content in filtered_items: if tag == '5': # 遇到h5,设置为当前分类,初始化子项列表 current_category = content result_dict[current_category] = [] elif tag == '6' and current_category is not None: # 遇到h6,将内容追加到当前分类的子项列表 result_dict[current_category].append(content) # 3. 转为格式化JSON json_result = json.dumps(result_dict, ensure_ascii=False, indent=2) print(json_result)
运行后输出的JSON结构:
{ "分类A": [ "子项A1", "子项A2" ], "分类B": [ "子项B1", "子项B2" ] }
入门建议
- 先啃正则基础:重点掌握分组匹配(提取标签类型和内容)、非贪婪匹配(避免抓取多个标签的内容),学会用
re.findall批量提取数据,以及空值过滤的逻辑 - 理解状态维护:
current_category这个变量是核心——它在遍历过程中记录当前所属的分类,把分散的h6和对应的h5关联起来,这是构建嵌套结构的关键 - 熟悉JSON操作:掌握所用语言的JSON序列化方法(比如Python的
json.dumps、JS的JSON.stringify),学会格式化输出便于查看
后续学习方向
- 语言基础强化:把你常用语言的循环、字典/对象操作练熟,这是所有结构化数据处理的基础
- 正则进阶:尝试处理更复杂的HTML场景(比如标签带属性、内容换行),但注意正则不是处理HTML的最优解
- 专业解析工具:后续可以学习HTML解析库(比如Python的BeautifulSoup、JS的cheerio),这类工具能更可靠地处理复杂HTML结构,避免正则的局限性
内容的提问来源于stack exchange,提问作者Lee Whieldon
相关产品推荐
相关产品推荐

