Tiddlywiki宏中从JSON tiddler加载JSON数据的标准实现方法
TiddlyWiki 宏开发:从JSON tiddler加载数据的标准方法
你当前编写的var my_dict = JSON.parse(this.wiki.getTiddlerText("my_json"))是可以跑通的基础实现,但没有覆盖TiddlyWiki运行时的常见边界场景,官方生态里通用的健壮标准实现会包含多层防护,避免宏渲染中断。
标准实现的核心逻辑
- 先通过
getTiddler()方法获取目标tiddler的完整对象,而非直接读取文本内容,提前判断tiddler是否存在 - 对存在的tiddler,在解析前增加异常捕获机制,避免JSON格式不合法、内容为空时触发语法错误
- 给解析结果设置默认空值,防止未定义内容影响后续宏逻辑执行
可直接复用的标准代码片段
let my_dict = {}; // 初始化默认空值,兜底场景下不会触发未定义报错 // 获取目标JSON tiddler实例 const jsonTiddler = this.wiki.getTiddler("my_json"); // 空值判断:tiddler不存在时直接跳过解析逻辑 if (jsonTiddler) { try { // 读取tiddler文本字段做JSON解析,空内容兜底为合法空对象字符串 my_dict = JSON.parse(jsonTiddler.fields.text || "{}"); } catch (parseError) { // 可选:解析失败时输出日志,不中断宏渲染 console.warn("目标JSON tiddler解析失败:", parseError.message); } }
和现有写法的差异说明
- 原写法的潜在问题:
getTiddlerText()在目标tiddler不存在时会返回空字符串,执行JSON.parse("")会直接抛出语法错误,导致当前宏甚至整个页面的渲染流程中断 - 标准写法的性能优化点:如果你的JSON tiddler设置了
type: application/json的元字段,TiddlyWiki核心会内置该类tiddler的解析缓存,重复读取同个JSON tiddler时不需要反复执行字符串解析,性能表现更好
注意事项
- 拿到解析后的JSON对象后,如果需要修改内容,建议先做深拷贝再操作,避免直接修改引用值污染TiddlyWiki的内部缓存结构
- 不要在宏逻辑里硬编码JSON tiddler的标题,尽量通过宏参数传入目标tiddler名,提升宏的复用性
内容的提问来源于stack exchange,提问作者fzzylogic
相关产品推荐
相关产品推荐

