Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Note to JSON

yaobianyaobian28 downloads

格式化与简化 Markdown 排版,并支持 JSON 格式化与压缩。

Add to Obsidian
  • Overview
  • Scorecard
  • Updates1

English | 简体中文

一个 Obsidian 插件:把 Markdown 笔记的排版规范化或紧凑化,把 JSON 美化成可读结构或压缩成一行。

纯本地运行,零网络请求,零运行时依赖。

功能

四条命令,全部可在「设置 → 快捷键」中搜索 Note to JSON 重新绑定:

命令 说明 默认热键
格式化 规范化 Markdown 结构:标题、列表、空行、代码块、表格 Ctrl+Alt+F
简化 去掉多余空行,让笔记更紧凑(绝不合并段落) Ctrl+Alt+S
格式化 JSON 用 2 空格缩进重排 JSON Ctrl+Alt+J
压缩 JSON 删除全部空白,压成单行 Ctrl+Alt+M
  • 编辑器右键菜单里还有「格式化 JSON」「压缩 JSON」两项,与命令行为一致。
  • 有选区时只处理选区;无选区时处理整篇文档。
  • 所有写回都是单次 editor.transaction,Ctrl+Z 一步回滚。

安装

手动安装:

  1. 执行 npm install && npm run build 生成 main.js。
  2. 把 manifest.json、main.js、versions.json 复制到 <你的仓库>/.obsidian/plugins/note-to-json/。
  3. 重启 Obsidian,在「设置 → 第三方插件」中启用 Note to JSON。

Markdown 格式化规则(F1–F11)

规则 名称 行为
F1 标题规范化 # 与文字之间只保留一个空格;#标签 视为 Obsidian 标签,不处理
F2 行尾空白清理 删除每行末尾的空格与制表符
F3 连续空行压缩 连续多个空行压缩为一个
F4 无序列表符号统一 * 与 + 开头的列表项统一为 -
F5 强调符统一 __粗体__ → **粗体**,_斜体_ → *斜体*,跳过 URL、wikilink、snake_case
F6 列表缩进统一 每级缩进统一为 2 个空格
F7 标题层级递进 一次只能下降一级,跨级会补齐中间层级
F8 标题前后空行 标题上下各保留恰好一个空行
F9 块级元素间隔 代码块与表格前后各保留一个空行
F10 表格列对齐 按列内最长单元格补齐竖线,保留 :--- 对齐标记
F11 补代码块语言 围栏未写语言时补上设置中的默认语言(默认关闭)

Markdown 简化规则(S1–S5)

规则 名称 行为
S1 行尾空白清理 删除每行末尾的空格与制表符
S2 连续空行压缩 连续多个空行压缩为一个
S3 列表项之间空行删除 同一列表块内相邻列表项之间的空行删除
S4 标题行后空行删除 标题下一行是空行则删除
S5 文档首尾空行删除 删除文档开头与结尾的空行

简化不会合并段落:段落之间的空行保留,避免两段被渲染成一段。

保护区

以下内容在任何规则下都逐字节不变:

  • YAML frontmatter(首行 --- 到闭合 ---)
  • 围栏代码块(``` / ~~~,按标记长度配对)
  • $$ 数学块
  • HTML 注释块
  • 行内代码、[[wikilink]]、![[嵌入]]、![](图片)、URL

选区上方的内容会参与状态分析,因此从代码块中间开始选中也不会误把代码当正文改。

JSON 格式化与压缩

保真

格式化不经过 JSON.stringify(JSON.parse(x), null, 2),而是只重排 token 之间的空白,字面量按原文输出:

输入 输出
1740123456789012345 原样保留(stringify 会丢精度)
1e21 原样保留(stringify 会写成 1e+21)
"a\/b\u4e2d" 原样保留(stringify 会解密重组)

空容器 {} / [] 保持一行;CRLF 文档写回仍是 CRLF。

非常规空白归一化

从网页、聊天工具或 Excel 复制来的 JSON 常在缩进里混入全角空格(U+3000)、不换行空格(U+00A0)、EM SPACE(U+2003)、零宽空格或 BOM。JSON 规范只认半角空格、Tab、LF、CR,这些字符会让解析失败,但报错片段看起来完全正常。

插件会在字符串字面量之外把这些字符归一化为半角空格,字符串内部一个字符都不改,成功后提示「已修正 N 处全角/特殊空白」。

严格校验

注释、尾逗号、单引号、NaN 一律判为非法:弹出提示「JSON 语法错误(第 N 行第 M 列:片段),已保持原样」,文档不做任何写回。片段中的不可见字符会显示为 ⟨U+0001⟩ 形式,便于定位。

已知取舍

  • 美化后首行顶格,原本缩进在列表项里的 JSON 不还原层级。
  • 不支持键名排序、图形化树视图、JSON5/JSONC。
  • 无选区且整篇是笔记正文时会报错,需先选中 JSON 片段。

设置项

设置 默认值 说明
格式化规则开关 F1–F10 开启,F11 关闭 逐条控制
简化规则开关 S1–S5 全部开启 逐条控制
代码块默认语言 空 F11 补的语言,留空则不补
操作提示 开启 是否弹出 Notice
打开快捷键设置 — 跳转到 Obsidian 原生快捷键页

已知局限

  1. 中文等宽字符按 1 个字符计算,纯中文表格在等宽字体下竖线不完全视觉对齐。
  2. 引用块内的表格(> | a | b |)不参与对齐与空行规范。
  3. #标签 与 #标题 语法上无法区分,插件选择保守不动。
  4. 规则会增删空行,写回后光标停留在原行号(保留列位置),可能偏移一两行。
  5. 列表项内以 4 空格缩进书写的围栏( ```js)不被识别为保护区。
  6. 单次处理上限 2 MB,超过则跳过。

开发

npm install     # 安装依赖
npm run dev     # 监听模式,改动即编译
npm run build   # 类型检查 + 生产构建,产出 main.js

main.js 是构建产物,已在 .gitignore 中排除,不随源码提交。

目录结构

manifest.json          # 插件清单(id: note-to-json)
versions.json          # 版本 → 最低 Obsidian 版本
esbuild.config.mjs     # 打包配置
tsconfig.json
src/
  main.ts              # 插件入口:命令注册、右键菜单、默认热键
  settings.ts          # 设置类型与默认值
  settingsTab.ts       # 设置面板
  core/
    text.ts            # 行工具与行内占位符保护
    segment.ts         # 保护区状态机
    rules.ts           # 格式化规则 F1–F11
    compact.ts         # 简化规则 S1–S5
    pipeline.ts        # 规则管线
    json.ts            # JSON 校验与 tokenizer 重排

技术栈

  • TypeScript 7 + esbuild,obsidian 作为 external
  • 不引入运行时依赖,不打网络请求
  • 行级状态机 + 规则管线,不使用 AST 序列化(避免改写 wikilink、callout、注释)

License

ISC

HealthExcellent
ReviewSatisfactory
About
Normalize Markdown layout or compact it by removing unnecessary blank lines while preserving YAML frontmatter, fenced code/math/HTML/comment blocks, embeds, links and paragraph boundaries. Format JSON with readable 2-space indentation or minify to a single line while preserving literals, normalizing problematic whitespace outside strings, and reporting strict syntax errors without writing on error. Run on a selection or the whole note and commit changes in a single undoable editor transaction.
MarkdownJSONFormatting
Details
Current version
0.0.5
Last updated
2 weeks ago
Created
2 weeks ago
Updates
1 release
Downloads
28
Compatible with
Obsidian 1.4.0+
Platforms
Desktop, Mobile
License
MIT
Report bugRequest featureReport plugin
Author
yaobianyaobiandabing119
GitHubdabing119
  1. Community
  2. Plugins
  3. Markdown
  4. Note to JSON

Related plugins

Text Format

Format selected text upper/lower/capitalize.

Linter

Format and style your notes. Linter can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular Markdown contents like list, italics, and bold styles; and more with the use of custom rule options.

Image Captions

Add captions to images with inline Markdown and link support. The caption format is compatible with the Commonmark spec and other Markdown applications.

PanGu

Add spaces between Chinese characters and English alphabet. A boon for typographically compulsive people.

Blur

Create obfuscated blocks of text.

Format with Prettier

Format files in your vault using Prettier.

Columns

Create columns in Markdown.

Admonition

Admonition block-styled content.

Custom Frames

Turn web apps into panes using iframes with custom styling. Also comes with presets for Google Keep, Todoist and more.

Editing Toolbar

The Editing Toolbar is modified from cMenu, which provides more powerful customization settings and has many built-in editing commands to be a MS Word-like toolbar editing experience.