Firefox书签备份jsonlz4格式解析与dejsonlz4解压实战

发布时间:2026/9/8 3:28:34
Firefox书签备份jsonlz4格式解析与dejsonlz4解压实战 简介dejsonlz4 是一款专为 Mozilla Firefox 书签备份文件设计的开源命令行工具。Firefox 会自动把书签备份保存为 .jsonlz4 格式底层采用 lz4 压缩并非普通 JSON 文件常规编辑器无法直接查看借助它可一键还原为可读内容。压缩包共 7 个文件主体是 C 语言源码3 个 c 文件、1 个 h 头文件另有 2 个 Markdown 说明文档和 1 份许可证整体仅 22KB体量轻巧、结构清晰。源码规模小、依赖少适合本地编译和二次改造配套说明能帮助使用者快速上手也能作为理解 lz4 解压算法、Firefox 书签数据结构与 .jsonlz4 文件格式的入门材料对刚接触 Mozilla 内部格式的开发者尤其友好。使用场景包括重装系统前的书签导出、旧配置迁移、误删后的本地备份恢复也适合想研究 Mozilla 数据存储机制的开发者已有 467 人学习或下载按需取用即可获得完整的解压源码与使用说明。 第一次折腾 Firefox 书签备份的人多半都经历过这么一幕把 user profile 路径翻出来里面躺着一堆以 .jsonlz4 结尾的文件旁边还有一份说明写着“这是书签的备份压缩包”。你以为是像 zip 一样的压缩文件把扩展名改成 .zip双击解压失败改成 .json双击全是乱码。直到你用对了工具 dejsonlz4一条命令下去十几秒后拿到一份干净的 JSON才明白这格式设计其实相当巧妙。这篇就专门讲讲 Firefox 书签备份文件的真实结构以及如何用 dejsonlz4 把那些打不开的备份变成真正可读、可导入、可迁移的书签数据。别管你是完全不懂命令行的普通用户还是想把这套逻辑写进自动化脚本里的人看完都能直接上手。1. 这个 .zip 里到底装了什么先从文件格式说起1.1 .jsonlz4 不是 .zip但同样是一套压缩方案这里要澄清一个很常见的误解Firefox 的自动书签备份文件本名是bookmarks-日期.jsonlz4扩展名跟 zip 没有任何关系。它内部的真实格式是文件开头固定 8 字节的魔数mozLz40\0接下来是从第 8 字节开始的一段 LZ4 block 压缩数据解压后才是真正的 JSON 文本。LZ4 是一种以“解压速度极快”著称的压缩算法Firefox 每天写自动备份时不想为了省几 KB 空间去用慢吞吞的高压缩率算法更看重读写快、CPU 占用低于是选中了 LZ4。那为什么很多人会把它们当成 zip一方面是网上不少教程把“备份文件”跟“压缩包”混着说造成误读另一方面确实存在用户自己把整份 profile 目录或 bookmarks 文件用 zip 打包的习惯也就是说“Zip 外壳 jsonlz4 内胆”的情况是真实存在的。所以正确的处理逻辑是先区分拿到的是 zip 外壳还是直接就一个 .jsonlz4 文件前者先用普通解压工具拆包后者直接上 dejsonlz4。1.2 备份文件在哪profile 目录与自动备份机制Firefox 的书签自动备份默认存放在 profile 目录下的bookmarkbackups/子文件夹里。快速找到它的办法是地址栏输入about:profiles找到当前正在使用的 profile 的“根目录”打开本地路径里面通常有一批形如bookmarks-2025-01-08.jsonlz4的文件。Firefox 会按日期滚动保留一定数量的旧备份方便你在误删书签、插件冲突、同步异常之后及时回滚。另外一个容易混淆的点从书签管理器CtrlShiftO里手动导出的 “Export bookmarks to HTML/JSON” 是未压缩的明文文件这种不需要 dejsonlz4 解压直接就能导入或编辑。dejsonlz4 专治的是自动备份目录里的那批 .jsonlz4 文件也就是“别人从 Firefox 配置目录里拷给你”或“你从系统备份里翻出来的”那些文件。明确你的文件来源才不会绕远路。2. dejsonlz4 是什么专为 Firefox 备份定制的解压器2.1 项目原理8 字节魔数与 LZ4 blockdejsonlz4 项目本质上是一个小体量的命令行工具做的事情非常纯粹读入 .jsonlz4 文件跳过头部 8 字节魔数把剩余数据交给 LZ4 解压将结果写入一个 .json 文件。为什么不能直接改名叫 “decompress-lz4”因为标准 LZ4 的 frame 格式和 Firefox 使用的方式并不完全一样——Firefox 用的是 LZ4 block 模式外加一个自定义的mozLz40头。通用解压工具往往不认这个头所以社区才有人写了 dejsonlz4 这种专用工具把“Firefox 私有头 block 解压”一起搞定。理解这个原理对排错很有用。比如有人把.jsonlz4改成.json后打开看到Mozilla Firefox或mozLz40字样加一堆乱码其实就是魔数仍然在最前面数据还处于压缩状态并不是文件坏了。反过来如果你拿到的备份不是期望的 JSON 开头{而是文件头直接没有魔数那说明文件来源可能不是 Firefox 自动备份需要先确认它是不是普通 JSON 或 HTML 导出。2.2 获取工具编译与 release 两种方式dejsonlz4 的主要发布渠道在 GitHub直接搜索 dejsonlz4 即可找到仓库。项目基本是 C 语言实现依赖 LZ4 库。Windows 用户先去 Release 页面找有没有编译好的 exe 下载没有的话用 MinGW-w64 或 MSYS2 环境自行编译步骤大致是安装mingw-w64-x86_64-gcc和liblz4开发包然后按仓库的 Makefile 执行 make。Linux 用户Debian/Ubuntu 系先sudo apt install liblz4-dev build-essential克隆仓库后 make通常几分钟就能拿到可执行文件。macOS 用户通过 Homebrew 安装 lz4 后同样执行 make。编译这件事对不熟悉命令行的人可能有点门槛但好消息是这种工具没有任何运行时依赖编译产物就是一个单一的可执行文件拷到 U 盘、放到任意目录都能直接运行。有条件的朋友推荐自己编一次后面批量处理备份时会舒服很多。2.3 基本命令一行解出 JSON项目编译完成后用法非常朴素./dejsonlz4 bookmarks-2025-01-08.jsonlz4 bookmarks-2025-01-08.json四个部分程序名 输入文件 输出文件。命令执行后不会有花哨的日志通常只是一句确认或者什么都打印直接返回退出码。用echo $?查看返回值0 代表成功输出文件的大小可以跟原始文件对比正常解压后 JSON 会比压缩后大不少因为书签列表里冗余字符串多压缩率高。拿到 .json 后用文本编辑器打开就能看到完整的guid、title、uri字段整个书签树结构一目了然。3. 实操从 zip 压缩包到可读书签的完整链路3.1 场景一拿到的是一个 zip 合集如果你从同步盘、旧电脑或者网盘里翻出来的备份是一个.zip文件比如firefox-profile-backup.zip那么第一步永远是“先解开 zip 外壳”。Windows 下双击或用 PowerShell 的Expand-Archive都行Expand-Archive -Path firefox-profile-backup.zip -DestinationPath ./backupLinux/macOS 下用unzip firefox-profile-backup.zip -d backup。拆包后不要急着看 data 等目录直接去找*.jsonlz4文件。正常情况下 zip 里会出现一个或多个以日期命名的 .jsonlz4 书签备份这些才是你真正要恢复的数据。如果 zip 里只有places.sqlite那属于另一种恢复场景dejsonlz4 帮不上忙需要另说。3.2 场景二直接面对 .jsonlz4拿到文件后在终端里切换到对应目录执行 dejsonlz4 解压。Windows 下假设工具解压到了D:\tools\dejsonlz4.exe书签备份在默认的 profile 路径中命令如下cd C:\Users\你的用户名\AppData\Roaming\Mozilla\Firefox\Profiles\xxxx.default-release\bookmarkbackups D:\tools\dejsonlz4.exe bookmarks-2025-01-08.jsonlz4 bookmarks-2025-01-08.json输出文件建议放在当前目录或专门新建的recovered文件夹里不要直接覆盖原文件。解压完成后用 VS Code、记事本或任何能打开大 JSON 的编辑器查看内容确认文件以{开头、结尾是}并且能找到children数组就说明解压成功了。3.3 解压后如何验证内容完整验证这一步很多人会跳过但值得做。因为一旦备份文件损坏解压过程可能部分成功、部分失败或者输出 JSON 在末尾被截断直接导入浏览器反而可能把不完整数据写进去。推荐的验证方式是格式化并检查 JSON 语法python -m json.tool bookmarks-2025-01-08.json /dev/null echo JSON OKWindows PowerShell 里也可以用Get-Content -Raw bookmarks-2025-01-08.json | ConvertFrom-Json做一次快速解析解析成功就不会报错。另外顺手用搜索功能查一下有没有预期中的关键书签比如你自己的常用网站域名确保备份内容和记忆一致。这一步做完才能真正进入恢复流程。4. 不想下载工具的人怎么办Python 与备份恢复的备选方案4.1 一个小脚本替代二进制工具如果你所在的机器上没有编译环境或者纯粹不想为一次性操作下载 exePython 其实能完成同样的事。核心思路跟 dejsonlz4 一模一样读文件 → 丢掉前 8 字节 → LZ4 block 解压 → 写文件。需要先装一个lz4库pip install lz4然后把下面这段脚本保存为dejsonlz4.py用法与 dejsonlz4 相同import sys import lz4.block MAGIC bmozLz40\x00 def dejsonlz4(src, dst): with open(src, rb) as f: data f.read() if not data.startswith(MAGIC): raise ValueError(不是有效的 Firefox jsonlz4 文件缺少 mozLz40 头) json_bytes lz4.block.decompress(data[len(MAGIC):]) with open(dst, wb) as f: f.write(json_bytes) print(fOK: {dst} ({len(json_bytes)} bytes)) if __name__ __main__: if len(sys.argv) ! 3: print(用法: python dejsonlz4.py 输入.jsonlz4 输出.json) sys.exit(1) dejsonlz4(sys.argv[1], sys.argv[2])几十行代码逻辑就是把 Firefox 的私有格式翻译成标准 LZ4 数据再解压。对于习惯 Python 的朋友这个方案比下载二进制工具更可控——遇到异常能立刻看堆栈想改成批量处理也很简单。4.2 拿到 JSON 之后导入浏览器与批量管理解压只是前半段后半段是把书签真正用起来。Firefox 恢复书签备份的方式并不复杂打开书签管理器CtrlShiftO→ 点击“导入书签”菜单里的“导入”或“备份与还原”→ 选择之前解压出来的 JSON 文件 → 导入完成后会在书签工具栏或“其他书签”下看到恢复的内容再手动整理即可。如果你手里有一整年的自动备份全是一个个解压效率太低可以写个循环把目录下所有bookmarks-*.jsonlz4批量处理成recovered-日期.json。Windows 的 PowerShell 或 Linux 的 Bash 都能做核心是把日期从文件名里提出来作为输出文件名。这样处理后你就能用diff或书签对比工具找出不同时间点的书签变化回溯误删操作非常有用。4.3 三种方案对比方案优点缺点适合谁dejsonlz4 二进制速度快、无依赖需要编译或找 release要多次处理、想自动化Python 脚本可读性强、易改依赖 pip install lz4熟悉脚本、想自定义逻辑在线解析站零安装隐私风险、大文件限长一次性应急注意在线解析站点需要把书签备份内容上传到别人服务器书签里可能带个人域名、内网地址等隐私信息我本人不建议用。如果实在急用也要优先选能本地跑的方案而不是把整个 profile 传上去。5. 实操中的坑与排查手册5.1 改了扩展名还是乱码认识压缩头最常见的失败案例是把bookmarks-2025-01-08.jsonlz4直接改名为bookmarks-2025-01-08.json双击打开看到开头是Mozilla Firefox或mozLz40加乱码。根本原因就是文件仍是压缩态改扩展名不会触发任何自动解压。要“伪装”成普通 JSON必须先真正完成解压这一步。同理改名为.zip再用解压工具打开也是大概率失败因为 zip 容器需要多个结构区块local file header、central directory 等jsonlz4 里完全没有这些只有 LZ4 block 数据zip 工具自然不认。5.2 解压报错magic 不对、文件损坏怎么办dejsonlz4 和上面的 Python 脚本都会检查开头 8 字节。如果报“magic 不对”或 ValueError先说结论文件大概率不是 Firefox 自动备份格式可能是手动导出的明文 JSON、HTML 导出文件或者被其他工具二次处理过。不要硬解先拿十六进制查看器看开头mozLz40后跟00表示是标准 jsonlz4如果开头直接是{或!DOCTYPE那这文件压根没压缩直接改名就能用如果开头是PK说明它是个 zip另外拆包才对。如果文件在复制过程中被截断解压时可能没有报错但输出 JSON 结尾残缺或者 LZ4 解压直接抛 “data corruption” 异常。这种情况基本救不回来了建议去自动备份目录里找更早的日期文件或者看 Firefox 同步历史里有没有其他副本。5.3 日常预防给书签备份加一道保险踩过几次坑之后我现在养成的习惯是每隔一段时间手动导出一次书签 HTML同时把 profile 目录下的 bookmarkbackups 文件夹整体拷进压缩包闲了就在本地磁盘和网盘各留一份。整个过程可以写成一个很短的脚本先调用 dejsonlz4 把最近几个 .jsonlz4 解出明文再对它们做一次差异对比最后用 zip 打包整个目录。这样一来即使浏览器同步异常、系统重装甚至误删了原来的 profile至少还有一份“解压后明文 zip 归档”的双保险。另外提醒一句做任何恢复操作之前先把原始 .jsonlz4 文件复制一份。解压是只读操作理论上不会破坏源文件但万一你手滑在编辑器中保存了压缩态文件或者用脚本做了批量写入原始备份就可能被覆盖。多花五秒钟复制一份能省掉后面一整天的找备份时间。本文还有配套的精品资源点击获取