故障现象
修改 claudian-settings.json 的 systemPrompt 字段后,Obsidian Claudian 插件加载失败,Ribbon 图标和命令均未注册。
根因
对 JSON 文件做了原始文本替换,替换内容中的 Python \n(实为 \r\n on Windows)被写入了 JSON 字符串值内部。
JSON 规范禁止字符串值中出现未转义的控制字符。
插件启动时通过 loadSettings() → JSON.parse() 解析该文件,在位置 344 遇到 \r(ASCII 13)直接抛出异常,导致 onload() 崩溃。
错误链条
- 尝试用
python json.load() 解析文件 → 失败(BOM + 控制字符问题)
- 错误决策:放弃 JSON 解析,改用原始文本替换(
f.read() → str.replace() → f.write())
- 替换字符串中混入了 Python 的
\n(实为 Windows 的 \r\n),被直接写入 JSON 值内部
- 插件
JSON.parse() 遇到未转义控制字符 → 崩溃
正确做法
绝对禁止对 claudian-settings.json 做原始文本替换。
正确的修改流程:
json.load() 解析文件(如遇 BOM,用 utf-8-sig)
- 如解析失败,说明文件已损坏 → 先修复 JSON 结构,不能绕过解析器
- 修改 Python 对象中的目标字段
json.dump() 序列化写回 —— JSON.stringify 会自动处理所有转义
- 写回后再次
json.load() 验证文件合法性
改进措施
- 任何对
.claudian/claudian-settings.json 的修改,必须走 JSON 解析→修改→序列化流程
- 解析失败时不能 bypass,必须先修复 JSON 结构
- 序列化后必须验证新文件可被
json.load() 正确读取
- 更好的方案:通过插件的
saveClaudianSettings() API 保存,从根源杜绝非法 JSON
故障现象
修改
claudian-settings.json的systemPrompt字段后,Obsidian Claudian 插件加载失败,Ribbon 图标和命令均未注册。根因
对 JSON 文件做了原始文本替换,替换内容中的 Python
\n(实为\r\non Windows)被写入了 JSON 字符串值内部。JSON 规范禁止字符串值中出现未转义的控制字符。
插件启动时通过
loadSettings() → JSON.parse()解析该文件,在位置 344 遇到\r(ASCII 13)直接抛出异常,导致onload()崩溃。错误链条
python json.load()解析文件 → 失败(BOM + 控制字符问题)f.read()→str.replace()→f.write())\n(实为 Windows 的\r\n),被直接写入 JSON 值内部JSON.parse()遇到未转义控制字符 → 崩溃正确做法
绝对禁止对
claudian-settings.json做原始文本替换。正确的修改流程:
json.load()解析文件(如遇 BOM,用utf-8-sig)json.dump()序列化写回 ——JSON.stringify会自动处理所有转义json.load()验证文件合法性改进措施
.claudian/claudian-settings.json的修改,必须走 JSON 解析→修改→序列化流程json.load()正确读取saveClaudianSettings()API 保存,从根源杜绝非法 JSON