这个工具做什么

把带换行缩进的 JSON 压成一行, 方便塞进 curl -d, SQL 字段, 代码常量或测试用例里. 粘贴即出结果, 不用点按钮.

输入:
{
  "a": 1,
  "b": [1, 2],
  "msg": "hello"
}

单行内容:
{   "a": 1,   "b": [1, 2],   "msg": "hello" }

两个输出有什么区别

页面上有两个复制按钮, 来源完全不同, 这是最容易搞混的地方:

  • 复制单行内容 -- 上一步那个结果. 它只是把换行符和制表符机械替换成空格, 再压掉 ", 后面的空白, 不校验, 不重新序列化, 所以缩进留下的连续空格会保留, 粘的就算不是 JSON 也一样能拿到. 想要"看着像一行"就用它.
  • 复制 JSON 内容 -- 服务端把这行文本当作 JSON 解析后再压缩的结果, 形如 {"a": 1, "b": [1, 2], "msg": "hello"}: 结构规范, 冒号和逗号后面统一带一个空格, 缩进空格被清掉. 它只有在你输入的是合法 JSON 时才会出现.

需要干净的 JSON 文本时, 以第二个为准: 它是重新序列化过的结果; 第一个只是把换行换成了空格.

什么情况会用到

  • 把 settings.json 之类的配置一行发给同事, 或写进工单;
  • 构造 curl -X POST -d '...' 的请求体;
  • 往数据库 json 字段里插一段初始值;
  • 接口返回一段带缩进的 JSON, 要先压平再拼进别的字符串里.

常见问题

提示"JSON 解析失败: Expecting value"是什么意思?

说明这段内容不是合法 JSON, 接口会把错误原因和位置一起返回(如"第1行第1列"), 此时只有"单行内容"可用, 不会出现"复制 JSON 内容"按钮. 最常见的四种原因: ① 用了单引号 {'a':1}; ② 带注释(//, /* */); ③ 最后一项后面多了逗号; ④ 压根不是 JSON 而是普通文本或 key=value.

能不能直接生成代码里的字符串常量?

不能 -- 本页只压行, 不做转义, 输出里的引号还是裸引号. 要 Java/JS 里的字符串字面量, 在浏览器控制台对压平后的结果执行 JSON.stringify(s) 即可; Java 里也可以用现成的序列化库把对象直接转成带转义的字符串.

为什么压完还剩一堆空格?

那是"单行内容"的正常表现: 它把 \n 换成空格, 原来的缩进空格就跟着留在行里了. 要干净的文本请用"复制 JSON 内容", 或者直接把结果丢进 JSON 格式化 重新序列化一遍.

只是想反过来: 把一行的 JSON 展开看?

那用 JSON 格式化, 粘进去就是带缩进的可折叠视图; 本页方向相反, 只负责压平.

内容会被上传吗?

"单行内容"这一步完全在浏览器里做; 一旦内容非空, 页面还会把它提交给 /data/decode/decode 接口做 JSON 校验和规范化, 这部分文本会离开本机, 只用于这一次解析. 含密钥, 令牌, 真实用户数据的 JSON 请先脱敏.

相关工具