news 2026/11/4 15:36:03

Blockly 工作区保存指南:XML 与 JSON 序列化双方案对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Blockly 工作区保存指南:XML 与 JSON 序列化双方案对比

Blockly 工作区保存指南:XML 与 JSON 序列化双方案对比

【免费下载链接】blocklyThe web-based visual programming editor.项目地址: https://gitcode.com/gh_mirrors/bloc/blockly

搭好 Blockly 编辑器后,用户一刷新页面,积木就没了。想让工作区像网页存档一样随时存回,就得做序列化。本文教你用 Blockly 内置的两套保存方案,把工作区的积木、变量、坐标完整存下来再还原。

30 秒结论

  • 想快速上手、存到localStorage、兼容老版本积木:选 XML 方案。
  • 想存到后端数据库、参与现代 JS 工具链、保留图标等高级状态:选 JSON 方案。
  • 二者都能存回工作区,区别在格式与生态,不是功能强弱。

方案 A:用Blockly.Xml走 XML

Blockly 最早就用 XML 存积木,XML 序列化源码 里Blockly.Xml提供全套接口。你只需两步存、两步读。

  1. 导出:Blockly.Xml.workspaceToDom(workspace)得到 DOM,再转文本。
  2. 存储:把文本写进localStorage或提交后端。
  3. 读回:Blockly.utils.xml.textToDom(text)解析,Blockly.Xml.domToWorkspace还原。

仓库自带的云存储演示就是这条路线。核心四行:

const xml = Blockly.Xml.domToText(Blockly.Xml.workspaceToDom(workspace)); localStorage.setItem('blocks', xml); Blockly.Xml.domToWorkspace(Blockly.utils.xml.textToDom(localStorage.getItem('blocks')), workspace);

✅ 优势:

  • 格式直观,浏览器和后端都天然能读 XML。
  • 生态最久,老版本积木文件可直接打开。
  • 无需额外依赖,Blockly.Xml开箱即用。

❌ 不足:

  • 文本冗长,大工作区体积偏大。
  • 转义规则多,手工改文本容易出错。
  • 结构是标签树,做局部更新不如对象方便。

方案 B:用Blockly.serialization走 JSON

Blockly.serialization.workspaces是新一代方案,JSON 序列化源码 直接返回普通 JS 对象,天然契合JSON.stringify。

  1. 导出:Blockly.serialization.workspaces.save(workspace)拿到状态对象。
  2. 存储:JSON.stringify后落库,结构清晰可查询。
  3. 读回:JSON.parse后用Blockly.serialization.workspaces.load还原。

代码演示 里就并排展示了两种输出。核心四行:

const state = JSON.stringify(Blockly.serialization.workspaces.save(workspace)); localStorage.setItem('blocks', state); Blockly.serialization.workspaces.load(JSON.parse(localStorage.getItem('blocks')), workspace);

✅ 优势:

  • 对象结构直观,便于存进数据库、做字段检索。
  • 与 JSON 工具链无缝,前后端通用。
  • 能完整保存图标、extraState等高级状态。

❌ 不足:

  • 老版本 XML 积木文件需转换才能读入。
  • 依赖较新版本 API,需升级 Blockly。
  • 格式偏紧凑,人肉阅读不如 XML 直观。

硬指标对比

维度XML 方案JSON 方案
上手难度低中
体积偏大紧凑
后端兼容好好
维度XML 方案JSON 方案
老文件兼容✅⚠️ 需转换
高级状态⚠️✅
局部更新❌✅
维度XML 方案JSON 方案
维护成本低低
生态成熟度✅ 久✅ 新
学习曲线平缓平缓

场景化选型

  • 个人学习站 / 教学 Demo:选 XML 方案,代码最简、老文件能直接打开。
  • 企业级在线编辑器:选 JSON 方案,状态对象好入库、好查询、好扩展。
  • 极客玩家做插件开发:选 JSON 方案,extraState与图标序列化更完整。

常见问答

Q:两套方案能混用吗?能读,但要转换。JSON 读 XML 文件会失败,建议统一一种格式后再存储。

Q:存下来的内容包含坐标吗?XML 顶层块会带x/y;JSON 通过addCoordinates控制。想还原原始位置就保留坐标。

Q:刷新后积木没回来,怎么排查?先在控制台打印save结果,确认对象非空,再检查load是否传对了同一个workspace实例。

Q:能只存不读吗?可以。只调save/workspaceToDom导出,适合做快照、分享链接这类场景。

收尾

XML 胜在简单兼容,JSON 胜在结构与现代生态——按你的存储后端和版本来选即可。现在就打开 demos/code/code.js,照着上面四行把保存跑通。

【免费下载链接】blocklyThe web-based visual programming editor.项目地址: https://gitcode.com/gh_mirrors/bloc/blockly

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 15:36:02

小红书内容如何批量下载?XHS-Downloader 上手指南

小红书内容如何批量下载?XHS-Downloader 上手指南 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具 项目地址: https://gitcode.com/gh_mirrors/xh/XHS-Downloader 刷到一篇不错的小红书笔记想留档…

作者头像 李华
网站建设 2026/11/4 15:35:47

用 Dependencies 快速定位 Windows DLL 加载问题

用 Dependencies 快速定位 Windows DLL 加载问题 【免费下载链接】Dependencies A rewrite of the old legacy software "depends.exe" in C# for Windows devs to troubleshoot dll load dependencies issues. 项目地址: https://gitcode.com/gh_mirrors/de/Depen…

作者头像 李华
网站建设 2026/11/4 15:34:36

深度解析Hermes Agent容器安全架构的3大防御层设计

深度解析Hermes Agent容器安全架构的3大防御层设计 Hermes Agent作为一款功能强大的AI代理工具,其容器化部署的安全架构设计直接关系到企业级应用的数据安全与系统稳定性。在当前的云原生环境中,容器安全已从简单的镜像扫描演变为多层次、纵深防御的复杂…

作者头像 李华
网站建设 2026/11/4 15:34:36

阅读APP书源导入避坑手册:26个书源几分钟一键导好

阅读APP书源导入避坑手册:26个书源几分钟一键导好 【免费下载链接】Yuedu 📚「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 装好「阅读」APP,一搜书却啥都没有?或者书源用着用着集体失效&#…

作者头像 李华
网站建设 2026/11/4 15:32:51

Betaflight飞控固件上手指南:从刷写固件到看懂黑匣子数据

Betaflight飞控固件上手指南:从刷写固件到看懂黑匣子数据 【免费下载链接】betaflight Open Source Flight Controller Firmware 项目地址: https://gitcode.com/gh_mirrors/be/betaflight 第一次把飞控连上电脑,刷到一半弹出端口找不到、电机转向…

作者头像 李华