回到我的 WP Adminify 时代,一张支持票落地,上面简单地写着:"设置导入已损坏。什么都不起作用。 "用户手工编辑了一个导出的设置文件 - 9,000 行 JSON 斑点第 217 行上的一个尾随逗号 - 我的导入程序以世界 '最无用的错误: 导入失败。
我写了那个错误消息。那's在我身上。
我们两个人花了 40 多分钟来回才找到一个逗号,一个像样的格式化程序会在半秒钟内标记出来。那张票改变了我对 JSON 工具的看法,几年后它塑造了我构建的模式 json格式化程序 在 toolz。dev 上:错误位置是't 一个不错的。它's 整个产品。
JSON在线格式化方法,格式化失败的原因,以及吃掉每个人的语法陷阱's下午最终 - 包括我的。
TL;博士: 要在线格式化 JSON,请将其粘贴到客户端工具中,例如 Toolz.dev JSON 格式化程序-它漂亮 - 立即打印,用行号标记语法错误,并且从不上传您的数据如果格式化失败,您几乎可以肯定有一个尾随逗号,单引号或一个未引号的键使用2-空格缩进,除非您的团队另有说明。
"格式化JSON"实际上是做什么的?
Formatting-漂亮-打印,如果你're感觉花哨-添加缩进和换行,这样结构就变得可见数据不't改变一点点。it's一个演示变换,仅此而已。
这个:
{"employees":[{"firstName":"John","lastName":"Doe","department":"Engineering","skills":["JavaScript","Python","Docker"]},{"firstName":"Jane","lastName":"Smith","department":"Design","skills":["Figma","CSS","Illustration"]}],"company":"Acme Corp","founded":2015}
成为这个:
{
"employees": [
{
"firstName": "John",
"lastName": "Doe",
"department": "Engineering",
"skills": ["JavaScript", "Python", "Docker"]
},
{
"firstName": "Jane",
"lastName": "Smith",
"department": "Design",
"skills": ["Figma", "CSS", "Illustration"]
}
],
"company": "Acme Corp",
"founded": 2015
}
Data相同。但只有其中一个让你一眼就能发现简在设计。
There's a bonus 大多数人不't 想一想:格式化也是变相验证,格式化程序必须解析你的文档才能重新格式化,所以如果 JSON 坏了,一个好的格式化程序会告诉你 哪里- 这是使用它而不是眯眼的实际原因。

如何在实践中在线格式化 JSON?
整个工作流程大约十五秒:
- 复制 JSON 无论它住在哪里 - DevTools Network 选项卡(右键单击请求 → 复制响应),
curloutput,一个日志文件,一个同事's 松弛消息。 - 打开 json格式化程序。 没有注册,没有登录。它加载并粘贴。
- 读输出。 Valid JSON 返回缩进和语法突出显示,具有大文档的可折叠部分,无效的 JSON 得到一个行号和纯英文描述的错误。
- 复制或下载。 无论哪种方式,只需单击一下即可。
That's it。有趣的部分是't快乐之路-it's 事情出错时第三步。所以让's出错。

为什么我的 JSON 不格式化?
如果格式化程序拒绝您的 JSON,则该文档会违反语法 RFC 8259。根据我的经验 - 无论是从我自己的调试还是从构建工具人们粘贴他们破碎的JSON到 - 它's几乎总是五件事之一。
1。尾随逗号
{
"name": "Alice",
"age": 30,
}
SyntaxError: Unexpected token } in JSON at position 34
JavaScript允许这样。JSON从来没有。删除每个对象和数组中最后一项之后的逗号:
{
"name": "Alice",
"age": 30
}
这是我的支持票逗号。尊重它。
2、单引号
{ 'name': 'Alice' }
经典的 Python 讲述。 str(my_dict) 产生单引用的伪 JSON; json.dumps(my_dict) product re re re 看到某件自称是 JSON 的单行引,有人印了一个 dict 而不是连载 - I'做到了,你'做到了,我们'都再做一次。
{ "name": "Alice" }
3、未逃脱的背斜
{ "path": "C:\new\test" }
看起来无害。但是 \n 是一个换行符和 \t 是一个选项卡,因此它解析成一条路径,其中实际存在换行 - 或者在诸如此类的序列上完全失败 \x。Windows路径是头号受害者:
{ "path": "C:\\new\\test" }
4、括号不匹配
{
"users": [
{"name": "Alice"},
{"name": "Bob"}
}
缺失 ]。这里琐碎,在一个嵌套在六个层次深处的配置中残酷。这是一类错误人类真诚地不擅长查找,解析器会立即找到 - 外包它。
5。javascript 值与 #39;t JSON 相同
{ "value": undefined, "count": NaN }
undefined、 NaN、和 Infinity 是 JavaScript,而不是 JSON。 JSON.stringify 悄悄地皈依 NaN 到 null 和滴 undefined properties three- 这意味着错误经常是't在JSON you're看着,它's在上游无论产生它什么用途 null 明确并检查您的序列化器。
的 格式化 catches all five 附行号,那最后一句就是这个工具类存在的原因。
您应该使用 2 个空格、4 个空格或选项卡吗?
永恒的争论,JSON版。这里's诚实的比较:
| 2 个空格 | 4 个空间 | 选项卡 | |
|---|---|---|---|
| 生态系统 | JavaScript/TypeScript,npm,反应 | Python、Java、.NET | Go,一些遗留代码 |
| 深筑巢 | 留在屏幕上 | 从右边缘跑出 | 取决于选项卡宽度 |
| 差异可读性 | 好 | 好 | 好直到与空间混合 |
JSON.stringify 默认参数 |
2 (按惯例) |
4 |
"\t" |
| 我的判决 | JSON 默认 | 如果你的团队's Python优先就好了 | Don't,专门针对 JSON |
My的位,而I'会死在这小山上: 2 个空格用于 JSON,无论您的其他代码使用什么。 JSON 比典型的源代码嵌套得更深 - API 响应深四级和五级是正常的 - 并且 4 空间缩进将它们变成水平滚动练习。即使在 Python 较重的团队中,我也将 JSON 设置为 2 个空间,没有人曾两次抱怨过。
无论您选择什么,都对其进行编码,以便辩论结束:
# .editorconfig
[*.json]
indent_style = space
indent_size = 2
insert_final_newline = true
的 格式化 支持两个宽度,因此匹配您的项目's约定是一个下拉,而不是讨论。
从命令行进行格式化怎么样?
有时终端比浏览器选项卡更近, 我的实际使用情况:
# jq — the standard. Install it, learn 10% of it, profit.
curl -s https://api.example.com/users | jq .
# Python — already on basically every machine
curl -s https://api.example.com/users | python -m json.tool
# Node, if you enjoy typing
node -e "console.log(JSON.stringify(JSON.parse(require('fs').readFileSync(0,'utf8')),null,2))" < data.json
每个人获胜的地方,老实说:
- jq 对于任何有脚本、重复或管道的 - 以及提取字段 (
jq '.data.users[].email'的(),而不是阅读整个文档。 - 的浏览器工具 为一次性,为任何你想做的事 探索 与可折叠部分,以及用于显示队友 - 您可以't屏幕- 将jq表达式共享给项目经理。
- VS代码 (x),在2019年10月10日,在2019年10月10日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在201
Shift+Alt+F) 对于住在存储库中并且无论如何都打开的 JSON 文件。
I 每天用完三样,谁告诉你一个代替别人,就是卖东西。
一个值得偷窃的习惯: curl -s ... > response.json 第一(formula)文件时,然后格式化文件,当响应原来是HTML错误页面时,会穿上一个 Content-Type: application/json costume - 发生比我们任何人都希望的更多 - 你'将想要原始字节,而不是你的浏览器's对它们的解释。
大多数人跳过三种格式化技术
按字母顺序对按键进行排序。 不同的序列化器以不同的顺序发出密钥,这使得 "same" 的 diffs 看起来像是重写。在 diffing 之前对密钥进行排序,将 300 行的 diff 变成实际更改的 2 行。这与。 文本差异工具 在比较分期有效负载与生产有效负载时 - 这一技巧在至少两次事件中亲自拯救了我。
保持短数组内联。 "colors": ["red", "green", "blue"] 1行读数比5行仪式好好的格式化程序自动执行此操作的数组的原语;it's之间的区别格式化的json你可以略读和格式化的json that's技术上漂亮但4000行长。
格式化片段,而不是文件。 15 MB的文档,当你只关心一个对象:复制那个嵌套的对象,单独格式化它,完成格式化整个文件,这样你就可以读取40行它是浪费精力 - 尽管如果你确实需要整个事情,客户端工具处理它没有上传进度条,因为那里's没有上传。
并知道什么时候 不是 to format:生产捆绑包中的微型JSON和API响应应该保持微型化,格式化是针对眼睛的,而不是针对电线的,如果需要相反的方向,同样 工具 一键最小化。
常见问题
如何免费在线格式化 JSON?
将您的 JSON 粘贴到 Toolz.dev JSON 格式化程序-它通过语法突出显示和错误检查即时格式化,免费,无注册。处理发生在您的浏览器中,因此您粘贴的任何内容都不会上传到任何地方。如果有效负载包含令牌或用户数据,则最后部分比 "free" 部分更重要。
为什么我的 JSON 格式不正确?
文档有语法错误,最上面的嫌疑人是尾随逗号、单引号、未引号的键、未转义的反斜杠和不匹配的括号。验证的格式化程序将指向精确的行。如果错误毫无意义,请检查您是否真的有 JSON - API 喜欢返回带有 JSON 内容类型的 HTML 错误页面。
What's 格式化和验证JSON的区别?
Formating 重写空白以获得可读性;验证根据 RFC 8259 语法检查文档。在实践中,它们're 相同的操作 - 格式化程序必须解析(验证)才能重新格式化。那's 为什么"它赢了't 格式"和"它's 无效"是相同的诊断。
JSON缩进应该用2个还是4个空格?
2个空格使用,除非你的项目已经在4。JSON上标准化了,JSON比大多数源代码嵌套得更深,2个空格的缩进保持了真实世界的API响应可读,而无需水平滚动。然后将选择锁定到 .editorconfig 所以它再也不会出现在代码审查中。
我可以在 VS Code 中格式化 JSON 而无需扩展吗?
是的- Shift+Alt+F (或x),在2019年1月17日,在2019年1月1日,在2019年1月1日,在2019年1月1日,在2019年1月1日,在2019年1月1日,在2019年1月1日,在2019年1月1日 Shift+Option+F mac上)使用内置格式化程序格式化任何json文件,并且"格式在保存"上使其自动。注意,vs代码'自己的 settings.json 是JSONC,它允许评论 - don't让这说服你常规的JSON做。
API 响应粘贴到在线 JSON 格式化程序中是否安全?
仅进入客户端。大量格式化程序站点将您的输入发布到服务器,这意味着您的 API 响应 - 令牌、电子邮件、所有这些 - 现在存在于其他人的日志中's。 Toolz.dev 格式化程序 完全在您的浏览器中运行;粘贴时通过查看网络选项卡自行验证。
如何格式化庞大的 JSON 文件 (10 MB+)?
Client端浏览器工具处理这个范围内的文件很好, 因为那里's没有上传步骤-粘贴是慢的部分过去50 MB左右, 切换到流媒体工具: jq 命令行上,或者仅提取您需要的部分并格式化该部分。切勿将庞大的文件粘贴到基于服务器的工具中; you're 等待上传没有任何好处。
如何最小化 JSON 而不是对其进行格式化?
相同的工具,对面的按钮 - json格式化程序 有一键最小化模式,剥离所有空白。最小化用于生产有效负载、本地存储和日志管道;格式适用于人类。无论哪种方式,数据都是相同的。
JSON格式化是否会改变数据?
No - 格式化只重写空白,所以键、值和结构在意义上保持相同格式化的文档及其最小化版本解析到完全相同的对象如果你的数据实际上发生了变化,你用手编辑了一些东西,而不仅仅是格式化。
什么是 JSON 美化器?
It's JSON格式化程序的另一个名称-一个工具,它采用最小化或混乱的JSON,并添加缩进和换行,以便人类可以读取它。 "美化," "漂亮打印,"和"格式"都描述了相同的操作 json格式化程序 一粘贴即可完成。
十五秒习惯
JSON格式化是一个小技能,回报超大 - 大多数"API被打破"时刻真的"有效负载是不可读的"时刻,而那些溶解结构变得可见的秒将粘贴格式读取循环降至十五秒,一整类调试摩擦消失。
的 Toolz.dev 上的 JSON 格式化程序 是我在那个支持票证期间想要的这个工具的版本:即时,精确的错误,并且无法泄露您的数据,因为它从未收到过它。
一旦您的 JSON 干净,下一步通常会将其移动到某个地方 - 进入电子表格 JSON 到 CSV 转换器退出了其中之一 CSV 到 JSON 转换器或者通过配置管道 YAML 验证器.从开始 JSON 到 CSV 指南 或者回到 JSON工具指南的完整 为完整的地图。
相关文章:



