TapCub 正式上线:统计、分析、客服一个平台免费用

免费工具 JSON 格式化 · JSON 在线解析与校验

把接口返回、后端日志里的一行 JSON、埋点上报的数据贴进来:按严格 JSON 校验,按你选的缩进排好版;格式不对时,直接告诉你解析停在第几行第几列。

  • 严格 JSON 校验
  • 边输边格式化
  • 本地处理
格式化工具

格式化、压缩或校验 JSON

示例是一条统计 SDK 上报的「支付成功」事件。换成你自己的 JSON,结果和统计数字会随输入更新。

只接受严格 JSON:双引号,不能有注释和末尾逗号。

JSON 格式正确。

键数

14

所有层级的对象键之和,数组元素不算键。

嵌套层级

4

对象和数组套了几层;单个值是 0。

大小(字节)

331

下方格式化结果的 UTF-8 字节数。

格式化结果
{
  "event": "order_paid",
  "time": 1794297600,
  "user": {
    "id": "u_1024",
    "plan": "年度会员"
  },
  "properties": {
    "order_id": "A8841",
    "amount": 199,
    "currency": "CNY",
    "coupon": null,
    "items": [
      {
        "sku": "PRO-12",
        "name": "专业版",
        "qty": 1
      }
    ]
  }
}
全部在你的浏览器里计算。这里输入的任何内容都不会上传,TapCub 也不会保存。

版本 v1.0更新于 更新记录

结果怎么读

格式化之外,它还告诉你什么

除了排好版的文本,还有一个校验结论和三个数字,各回答一个问题。

格式正确,或第几行第几列

「格式正确」表示严格的 JSON 解析器能原样接受。出错时给出的位置是解析器放弃的地方:漏了逗号,通常会报在下一个键的开头,所以要看这个位置和它前一个字符。

键数

所有对象里的键加起来,嵌套的也算。示例共 14 个:顶层 4 个,user 下 2 个,properties 下 5 个,商品里 3 个。数组元素是值不是键,100 个数字的数组不增加键数。

嵌套层级

最深的一条路径上套了几层对象和数组。示例是 4 层:最外层对象 → properties → items → 里面的商品对象。层级越深越难查询,很多统计工具会把事件属性压平到一两层。

大小(字节)

格式化结果的 UTF-8 字节数,所以会随缩进变化。一个汉字占 3 个字节,示例里的「年度会员」「专业版」就占了 21 字节。核对请求体、日志长度上限时,看压缩后的大小。

格式化是把解析出来的数据重新输出,等价的写法会换成标准形式:1.50 变成 1.5,1e3 变成 1000,\u4e2d 变成「中」。数据没变,只是文本不再逐字节相同。

怎么用

三步用完

不用安装,也不用点「格式化」按钮。

  1. 1

    粘贴 JSON

    从浏览器开发者工具的 Network、日志、Postman / Apifox 或文件里复制过来;首尾多出的空白不影响。

  2. 2

    选排版方式

    阅读一般用 2 个空格;4 个空格或 Tab 跟项目代码风格走;写进请求体、环境变量或配置项时选「压缩成一行」。要对比两段数据时勾上「按键名排序」。

  3. 3

    改错或复制

    有错就按提示的行列去改;显示「格式正确」后,用代码块上的复制按钮拿走结果。

JSON 语法要点

严格 JSON 允许什么

JSON(RFC 8259)是 JavaScript 对象写法的一个小子集。大部分「JSON 格式错误」,都是把 JS、Python 或 YAML 的写法带进了 JSON。

  • 值只有六种:字符串、数字、对象、数组、true / false、null
  • 没有日期类型:用 ISO 8601 字符串或 Unix 时间戳表示
  • 符号之间的空白随意加减,所以格式化不会改变数据
严格 JSON 语法:接受与不接受的写法
规则可以不可以
键名必须用双引号{"plan": "pro"}{plan: "pro"}
字符串用英文双引号"pro"'pro'、“pro”
最后一项后面不能有逗号[1, 2][1, 2,]
不能写注释—// 备注、/* 备注 */
数字只能是十进制199、-0.5、1.5e30199、0x1F、+1、NaN
只认 JSON 的字面量true、nullTrue、None、undefined
字符串里的控制字符要转义"第一行\n第二行"引号里直接换行
算例

同一条事件,四种排版

示例里的支付事件(14 个键、4 层)分别用四种方式输出。数据完全一样,变的只是空白和字节数。

同一段 JSON 在不同缩进下的大小
排版行数大小(字节)比压缩版多
2 个空格21331+53%
4 个空格21411+89%
Tab21291+34%
压缩成一行1217—

对这条数据来说,缩进让原始大小多出三分之一到将近一倍。走 HTTP 时如果开了 gzip 或 Brotli,差距会小很多(重复的空格很好压缩),但请求体、请求头和日志行的长度限制通常按原始字节算。

常见错误

JSON 为什么解析不了

大多数报错都出在下面几处,提示的列号一般正好落在上面。

把 JS 对象当 JSON

键名不加引号、单引号、末尾逗号、注释,在 JS 代码或 JSON5 配置里能用,严格 JSON 解析器都不认。

中文引号和全角符号

从 Word、微信、飞书里复制的 JSON 常被换成中文引号 “ ” 或全角逗号、冒号,看着没问题,一解析就报错。

长 ID 用数字传

超过 9,007,199,254,740,991 的整数在 JavaScript 里会丢精度,这里也一样。19 位的雪花 ID、Java Long 类型订单号要用字符串传。

JSON 被包成了字符串

形如 "{\"a\":1}" 的转义字符串本身合法,但格式化出来只是一个字符串。去掉外层引号和反斜杠转义后再贴进来。

常见问题

JSON 格式化常见问题

还有其他问题?

直接和 TapCub 团队聊聊——工作日通常几小时内回复。

JSON 格式化是什么意思?

把一段 JSON 解析后按统一的排版重新输出:要阅读就每个键一行、带缩进;要传输就压成一行、去掉多余空白。因为必须先解析,它同时也是一个 JSON 校验工具。

怎么判断 JSON 格式对不对?

贴进上面的输入框。显示「JSON 格式正确」就说明严格的解析器能接受;否则会提示解析停在第几行第几列,问题就在那个字符或它前面,常见的是漏逗号、多逗号或引号没配对。

JSON 和 JS 对象有什么区别?

JS 对象字面量允许键名不加引号、单引号、末尾逗号、注释,还有只在 JavaScript 里才有的值,JSON 都不允许。JSON5、JSONC 这类配置格式放宽了部分规则,但接口和 JSON.parse 要的是严格 JSON。

格式化和压缩有什么区别?

格式化加换行和缩进,方便人看;压缩去掉所有可省的空白,体积更小。两者包含的数据完全一样。上面的算例里,压缩后从 331 字节降到 217 字节。

格式化后长数字为什么变了?

和大多数基于 JavaScript 的工具一样,这里的数字按 64 位浮点数存,只在 9,007,199,254,740,991 以内精确。19 位的雪花 ID 会被四舍五入。后端返回这类 ID 时应当转成字符串,前端也就不会丢精度。

\u4e2d\u6587 这样的内容怎么转成中文?

直接贴进来就行。JSON 里的 \uXXXX 是 Unicode 转义,格式化后会显示成对应的汉字,比如 \u4e2d\u6587 显示为「中文」。很多后端框架默认输出这种转义,看日志时用它最省事。

键的顺序为什么变了?

不勾排序时,键保持原来的顺序,只有一个来自 JavaScript 引擎的例外:长得像非负整数的键(如 "2"、"10")会按数字大小排到最前面。另外同一个键出现两次时只保留最后一个值。按规范 JSON 对象本来就是无序的,程序不该依赖键的顺序。

我贴的 JSON 会上传吗?

不会。解析和格式化都在你的浏览器里完成,不会发给 TapCub。这个工具也没有分享链接,贴进来的内容不会出现在网址里。不过把接口数据贴进任何在线工具之前,建议先去掉 token 和个人信息。

更新记录

更新记录

这个工具的新功能、修复和数据更新,最新的在前。

  1. · v1.0

    首次上线首次上线。

缺功能或发现错误?告诉我们,常被提到的会排进下次更新。 全部工具更新

下一步

发出报表能信得过的事件

接入网站或 App 后,你上报的事件名和属性会变成筛选条件、拆分维度和漏斗步骤,到达时就做类型校验。

看清数据,找到增长。

每一次点击,都有数据依据。装好一行代码,1 分钟看到第一批数据。

无需信用卡 · 统计与客服都有免费版 · 统计无 Cookie