news 2026/4/23 12:46:02

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【实战】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选择器分别获取当前目录的书签和子文件夹
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 6:50:10

监控Source端Pg对Flink CDC的影响

1.pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 htt…

作者头像 李华
网站建设 2026/4/16 21:26:55

医疗边缘用Rust部署稳推理

&#x1f4dd; 博客主页&#xff1a;jaxzheng的CSDN主页 医疗边缘计算的稳定之锚&#xff1a;Rust语言在AI推理部署中的革命性应用目录医疗边缘计算的稳定之锚&#xff1a;Rust语言在AI推理部署中的革命性应用 引言&#xff1a;边缘医疗的稳定性危机 一、应用场景与价值&#x…

作者头像 李华
网站建设 2026/4/20 9:57:38

【路径规划】基于DWA实现机器人动态避障路径规划附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#…

作者头像 李华
网站建设 2026/4/10 17:05:43

电脑端录音软件,使用完全免费,不限制录音时长和次数,可调节音质,增大降低音量,一键录制~自媒体必备神器!

下载链接 夸克网盘&#xff1a;http://pan.freedw.com/s/4nw6Ka 软件介绍 Moo0录音专家是一款小巧免费的电脑录音软件&#xff0c;软件界面简洁&#xff0c;功能项目一目了然&#xff0c;为用户提供了简单的声音录制和设置功能&#xff0c;用户可以自行设置录制电脑全声或人…

作者头像 李华
网站建设 2026/4/18 7:31:00

面试 Java 基础八股文十问十答第十三期

面试 Java 基础八股文十问十答第十三期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;在一个静态方法内调用…

作者头像 李华