JSON Stringify 在线工具
把文本转义成 JSON 字符串字面量,或把双重编码的 JSON 字符串还原成可读文本。
JSON Stringify 是做什么的
这个页面做的是文本序列化:把输入里的每个字符转成合法的 JSON 字符串字面量 —— 两端加双引号,并转义引号、反斜杠、换行、制表符和其他控制字符。Unstringify 则是反向操作,前提是输入本身是一个合法的 JSON 字符串字面量。
当某个协议要求 JSON 属性里放的是文本,而这段文本本身又长得像 JSON、像日志、像多行查询语句或者其他带引号的格式时,这个功能就派上用场了。注意它和"先解析出对象、再把对象序列化"完全是两回事。
示例
输入:
{"name": "Ada", "active": true}
Stringify 之后:
"{\"name\": \"Ada\", \"active\": true}"
上面的输出是一个 JSON 字符串值。把它放到某个属性名后面,文档依然合法:
{
"payload": "{\"name\": \"Ada\", \"active\": true}"
}
此时 payload 属性里装的仍然是文本,不是嵌套对象。这样设计对不对,取决于接收方的 API。如果 schema 由你说了算,优先用真正的嵌套对象 —— 双重编码的 JSON 会多出一层解析,还让校验变得更麻烦。
一次只还原一层
如果输入以引号开头和结尾、中间带转义序列,点 Unstringify 就能取回这个 JSON 字符串里包含的文本。只有当取回的数据确实是一份 JSON 文档、而且接口约定就是这么两层时,才继续解析第二次。
举个例子:"{\"ok\":true}" 第一次解析得到文本 {"ok":true},第二次解析才得到对象。无脑解析两次是有风险的 —— 并不是每个字符串都该被当成可执行的结构。
FAQ
怎么撤销 stringify(把 JSON 字符串字面量解回来)?
点 Unstringify,或者对这个字符串字面量调用一次 JSON.parse。如果输入是对象、数组、数字、布尔、null 或非法 JSON 而不是 JSON 字符串,操作会失败。
它能把 JSON 对象转成文本吗?
它把编辑器里的全部输入当作文本处理,返回一个字符串字面量。如果你要在 JavaScript 里序列化一个内存中的对象,请在程序里调用 JSON.stringify(object)。如果你要校验或格式化一份 JSON 文档,请用 JSON 校验器;文档本身有问题,就先从 JSON Fix 开始。
还原之后内嵌的内容就安全了吗?
不安全。它只是剥掉了一层 JSON 转义。取回的文本接下来要进入什么上下文,就得按那个上下文的规则去转义和校验。