当前位置: 首页 > news >正文

【实战】Java使用 Jsoup 将浏览器书签 HTML 转换为 JSON(支持多级目录)

一、背景说明

浏览器(Chrome / Edge / Firefox)导出的书签文件,通常是Netscape Bookmark HTML 格式
在实际开发中,我们可能会遇到以下需求:

  • 将浏览器书签导入到自己的系统
  • 对书签进行结构化存储(如数据库、JSON)
  • 做书签导航站、搜索、同步工具等

本文通过Jsoup + Fastjson2,演示如何将书签 HTML解析为层级 JSON 结构,并支持递归子目录


二、书签 HTML 格式说明

浏览器导出的书签文件大致结构如下:

<DL><DT><H3>文件夹</H3><DL><DT><AHREF="https://www.baidu.com/">百度</A><DT><H3>子文件夹</H3><DL><DT><AHREF="https://map.baidu.com/">百度地图</A></DL></DL></DL>

关键点:

  • <H3>:表示一个文件夹
  • <A>:表示一个书签链接
  • <DL>:表示当前文件夹的内容
  • 文件夹与其内容是H3 → 紧跟的 DL

三、技术选型

技术作用
Jsoup解析 HTML DOM
Fastjson2构建 JSON 数据
JUnit + SpringBootTest测试运行

四、完整示例代码

下面给出完整可运行代码,包括导入、类定义和递归方法:

packagecom.nav.test;importcom.alibaba.fastjson2.JSONArray;importcom.alibaba.fastjson2.JSONObject;importorg.jsoup.Jsoup;importorg.jsoup.nodes.Document;importorg.jsoup.nodes.Element;importorg.jsoup.select.Elements;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.context.junit4.SpringRunner;@SpringBootTest@RunWith(SpringRunner.class)publicclassBookmark{@Testpublicvoidmain(){// 模拟浏览器导出的书签 HTML 内容StringbookmarkContent="<!DOCTYPE NETSCAPE-Bookmark-file-1>\n"+"<!-- This is an automatically generated file. -->\n"+"<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">\n"+"<TITLE>Bookmarks</TITLE>\n"+"<H1>Bookmarks</H1>\n"+"<DL><p>\n"+" <DT><H3 ADD_DATE=\"1632971641\" LAST_MODIFIED=\"1689686797\" PERSONAL_TOOLBAR_FOLDER=\"true\">书签栏</H3>\n"+" <DL><p>\n"+" <DT><A HREF=\"https://www.baidu.com/\" ADD_DATE=\"1689686710\">百度一下,你就知道</A>\n"+" <DT><H3 ADD_DATE=\"1689686747\" LAST_MODIFIED=\"1689686798\">子书签</H3>\n"+" <DL><p>\n"+" <DT><A HREF=\"https://map.baidu.com/\" ADD_DATE=\"1689686769\">百度地图</A>\n"+" </DL><p>\n"+" </DL><p>\n"+"</DL><p>";// 使用 Jsoup 解析 HTMLDocumentdoc=Jsoup.parse(bookmarkContent);// 找到书签栏(Chrome 的 PERSONAL_TOOLBAR_FOLDER)ElementmainFolder=doc.select("h3[personal_toolbar_folder]").first();// 递归处理JSONObjectresult=processFolder(mainFolder);// 输出 JSONSystem.out.println(result.toJSONString());}/** * 递归处理文件夹 * * @param folderElement 文件夹对应的 H3 元素 * @return JSONObject 结构 {name, links, subFolders} */privatestaticJSONObjectprocessFolder(ElementfolderElement){JSONObjectfolderJson=newJSONObject();// 文件夹名称folderJson.put("name",folderElement.text());// 当前文件夹对应的 <DL>Elementdl=folderElement.nextElementSibling();// 当前目录下的链接JSONArraylinks=newJSONArray();for(Elementa:dl.select("> dt > a")){JSONObjectlinkJson=newJSONObject();linkJson.put("name",a.text());linkJson.put("url",a.attr("href"));links.add(linkJson);}folderJson.put("links",links);// 子文件夹JSONArraysubFolders=newJSONArray();for(Elementh3:dl.select("> dt > h3")){subFolders.add(processFolder(h3));}folderJson.put("subFolders",subFolders);returnfolderJson;}}

五、输出 JSON 示例

运行上面的代码,控制台输出类似:

{"name":"书签栏","links":[{"name":"百度一下,你就知道","url":"https://www.baidu.com/"}],"subFolders":[{"name":"子书签","links":[{"name":"百度地图","url":"https://map.baidu.com/"}],"subFolders":[]}]}

六、实现思路总结

  1. H3 表示文件夹
  2. H3 后面的 DL 是内容
  3. 使用nextElementSibling()关联目录
  4. 递归解析子文件夹
  5. 通过> dt > a> dt > h3选择器分别获取当前目录的书签和子文件夹
http://www.jsqmd.com/news/258932/

相关文章:

  • 2026安徽小红书代运营公司权威测评:避坑指南与高效选择 - 野榜数据排行
  • SSM434数字图像处理在线考试课程教学系统vue
  • 2026玻璃钢喷淋塔厂家权威推荐榜单:玻璃钢脱硫吸收塔/玻璃钢脱硫净化塔/玻璃钢烟气脱硫塔/玻璃钢脱硫塔装置源头厂家精选。 - 品牌推荐官
  • 2026年市面上专业的换热器供应商哪家强,高大空间循环制热机组/表冷换热器/空调换热器/空调机组,换热器品牌联系电话 - 品牌推荐师
  • 【Puppeteer 实战】自动登录后台并分页提取表格数据(含 50 条/页切换)
  • 前端核心知识:Vue 3 编程的 10 个实用技巧
  • 太古里火锅风向标:成都口碑火锅,让你舌尖狂欢!美食/特色美食/社区火锅/烧菜火锅/火锅,成都火锅品牌排行 - 品牌推荐师
  • ssm424面向社区健康服务的医疗平台--论文
  • 数据结构:队列
  • 2026年压力容器法兰优选指南:这些厂家凭实力上榜,变压器法兰/非标法兰/不锈钢法兰/锻件,压力容器法兰工厂怎么选择 - 品牌推荐师
  • ssm428人体健康体检预约信息管理系统--论文
  • 【鸿蒙小程序】| 鸿蒙系统中的元服务创新与实践
  • 2026年电竞房家具定制厂商权威推荐榜:优选专业电竞/全屋定制/整体家居及多风格家具定制厂家 - 品牌推荐官
  • 零基础学AI大模型之Agent智能体
  • 虾皮开店需要押金吗?要交多少押金
  • 即插即用系列 | IEEE TMM 2025 SPDFusion:当语义分割成为图像融合的“导师”
  • AI的提示词专栏:小说创作 Prompt,人物设定、情节走向、对话写作
  • JBoltAI AI应用中台:重塑企业智能化的统一基座与范式
  • AI的提示词专栏:多模态 LLM(Vision-LLM)Prompt 语法
  • 全网最全9个AI论文平台,助你轻松搞定本科生论文!
  • 辽源市东丰东辽龙山西安区英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 导师严选2026一键生成论文工具TOP8:本科生毕业论文写作全攻略
  • 挂机放置类游戏开发学习 Part.3 UI布局
  • springboot+vue智慧养老手表管理系统 本系统共分为两个角色:家长,养老院管理员 功...
  • 2026年多级泵供应商权威推荐榜单:多级离心泵/污水泵/自吸泵/深井泵/化工泵源头厂家精选 - 品牌推荐官
  • 全栈贯通,实效为先:JBoltAI全栈能力集成的落地价值
  • sigmoid 函数详解(机器学习基础)
  • 使用PC浏览器devTool工具调试安卓手机h5页面
  • 赋能复杂业务自动化:JBoltAI 链式调用的控制结构设计
  • 2025年液体包装机厂家推荐榜:四川西德利自动化科技有限公司,丸剂包装机/粉剂包装机/枕式包装机/粉末包装机/圆角袋包装机/颗粒包装机/包装机/定量包装机/多列包装机厂家精选 - 品牌推荐官