Bug让我搭建这个工具,小得令人抓狂,我把一个HTML邮件模板- 几百行有引号,换行,还有奇怪的反斜杠- 塞进一个JSON字段发送到一个API,请求一直回来400,模板没问题,JSON自己也没问题,但两人见面的那一刻,一个没有逃避的双引号三百个字符在默默地提前关闭了字符串,变成垃圾之后的所有东西都无法理解解析器,我已经把有效的文本粘贴到一个有效的容器里,并制作了一个无效的文档。
JSON逃避解决的整个问题就是这样,值得理解而不是周旋,本指南涵盖了逃避实际上做了什么,哪些角色必须逃避以及为什么,如何不逃避逆转它,以及如何使用免费 JSON 逃生/ 取消转义 JSON 字符串中移动任意文本的工具,而不会出现任何静音故障。它与我在其中写过的其他数据实用程序并列 JSON 工具的终极指南。
TL;博士: JSON字符串不能包含原始双引号、原始反斜杠或像换行符和制表符这样的原始控制字符,Escaping用反斜杠序列替换每个-
"变成\",换行符变为\n,一个选项卡变为\tU + 0020以下的,而其他任何东西都变成\uXXXX.不转义将那些序列变回原来的字符.The JSON 逃生/ 取消转义 工具在您的浏览器中同时执行这两项操作,并有将结果包装为引号的选项,可将非 ASCII 转义为\uXXXX的,或者逃脱前斜杠。
转义JSON字符串是什么意思?
JSON 有一个精确的、已发布的语法 - 它的定义是 RFC 8259 and by ECMA-404标准- 而且字符串内部可能出现的规则是严格的。JSON字符串是一串字符,用双引号包裹。因为双引号标记了字符串的开始和结束,所以双引号 里面 文本会过早结束。由于反斜杠开始的是转义序列,因此原始反斜杠将被误读为文本的开头。并且由于 JSON 字符串旨在成为单一逻辑文本行,因此字面控制字符(换行符、选项卡、回车符)不允许未转义地坐在其中。
Escaping就是把那些麻烦的字符中的每一个都替换成JSON理解的二字反斜杠序列的过程,双引号变成 \"。反斜杠变为 \\.换行符变为 \n.结果是文字 that 看起来 些丑陋但现在可以安全地在两个引号之间掉落,而不会破坏周围的文档,其含义是相同的 - JSON解析器读取 \n 再次产生真正的换行符 - 但代表现在是合法的。
JSON文档格式化根本不同,格式化程序安排整个对象的结构:缩进、键排序、元素之间的空白,逃逸向下操作一层,在 单字符串值的内容。你伸手去拿 json格式化程序 当您有完整的文档要漂亮打印或验证时,并且对于 JSON 逃生/ 取消转义 当您有一块原始文本时,您需要将其放入一个字段中。
哪些角色实际上需要逃脱?
JSON规范在这里是令人耳目一新的具体,在一个字符串里面,正好是两个字符 必须 总是被转义,加上整个控制字符范围。
2个强制单字转义为双引号(\")和反斜杠(\\)。除了那些之外,JSON还为五个常见的控制字符定义了短转义:后空(backspace)\b),形成进给(\f),换行符(\n),回程车(\r),以及水平选项卡(\t)。任何 其他 控制字符 - 任何代码点低于 U+0020 且没有简短形式的字符 - 必须写为 a \u 转义后跟四个十六进制数字,因此空字节变为 \u0000 以及"单位分隔符"成为 \u001F。
还有两个角色 可选 逃避,这就是混乱蔓延的地方。向前斜杠可能写为 \/但它不一定是--平淡无奇 / 是完全有效的JSON。以及任何高于ASCII范围的字符,如重音 é 或者表情符号,可以按字面意思写在 UTF-8 文档中或转义为 \uXXXX;两者都是合法的。的 JSON 逃生/ 取消转义 工具始终处理强制转义,并为您提供两个可选转义的切换,以便您可以匹配目标系统期望的任何内容。
我应该逃避前斜杠和非 ASCII 字符吗?
这两种可选的转义存在确实有原因,即使您很少需要它们。
前斜杠转义在一种常见情况下很重要:当 JSON 嵌入 HTML 内时 <script> tag。浏览器's HTML解析器寻找字面顺序 </ 要查找脚本块的末尾,请查找包含的字符串 </script> JSON中可以过早关闭标签, 打破页面。将斜杠写成 <\/script> -仍然有效的JSON,一旦解析仍然相同的字符串 -避免了这一点,在内联脚本之外,您可以单独留下斜杠,这就是为什么该工具默认情况下不会转义前斜杠。
转义非 ASCII 字符为 \uXXXX 是关于可移植性而不是正确性,如果你的JSON可能通过一个破坏UTF-8字节的系统- 一个旧的日志记录管道,一个配置错误的代理,一个假设ASCII的通道- 将ASCII范围之上的每个字符变成一个纯ASCII \u escape保证它能完好无损地存活下来,输出体积更大,人类可读性更低,所以默认情况下是关闭的,但是"escape Unicode"切换是当你需要防弹运输时就有一个代码点,比如 é 变成 \u00e9的,而一个JSON解析器在出路时重建了原始字符。
逃避是如何运作的?我什么时候需要它?
Unescaping 是完全相反的:它穿过一个转义的字符串,并将每个反斜杠序列变回它所代表的原始字符。 \n 成真正的换行符, \t 成标签, \" 成为双引号,并且 \uXXXX 成为该代码点的字符。每当您处于接收端时,您都需要它 - 您已从 JSON 文件、日志行或 API 响应中直接复制字符串值,并且您希望阅读原始文本,而不会出现一丝反斜杠。
一个好的逃避者做两件事,一个天真的查找和替换不会做,首先,如果整个值被引用,它会剥离一对周围的双引号,这样你可以粘贴 "line one\nline two" JSON文档中直接获取干净的文本,第二,它 验证 正如它所说:无效的转义序列,例如 \x(或字符串最末尾的杂散反斜杠)是一个真正的错误,并且 JSON 逃生/ 取消转义 tool报告它的位置,而不是猜测和默默地产生错误的输出。在位置14处获得一个明确的"无效的转义"击败获得看起来几乎正确但被微妙地损坏的文本。
信任的关键属性是逃避和不逃避是精确的逆,逃避任何文本,然后逃避结果,你就可以准确地得到你一开始的样子,字符对字符。这种往返保证使使用该工具作为管道中的常规步骤变得安全,而不是必须手工仔细检查的危险转换。
转义与相关字符串操作
JSON escaping 是 " 的一个家族之一,使此文本对于上下文安全 " 转换,并且有助于保持它们笔直。以下是它与开发人员最常混淆的邻居相比的方式。
| 操作 | 防止 | 例子 | 工具 |
|---|---|---|---|
| JSON 逃跑 | 用引号、反斜杠或控制字符破解 JSON 字符串 | he said "hi" → he said \"hi\" |
JSON 逃生/ 取消转义 |
| HTML 实体编码 | 打破 HTML 或启用 XSS <、 >、 & |
<b> → <b> |
HTML 实体 |
| URL 百分比编码 | 使用空格或保留字符破解 URL | a b → a%20b |
- |
| JSON 格式/验证 | 整个文档的结构错误 | 精简→印刷精美 | json格式化程序 |
| JSON → 山药 | 在序列化格式之间移动配置 | {"a":1} → a: 1 |
JSON 到 YAML |
需要注意的模式是每个逃生目标都是 a 不同 container。html实体保持文本不破坏html;百分比编码保持它不破坏url;json转义保持它不破坏json字符串使用错误的-html-编码需要json转义的东西-留下真正的问题未解决,并添加了新的噪声层。因为所有这些都运行在您可能不想交给第三方服务器的文本上,我保留这些工具的每一个客户端,这是我在客户端中完整提出的论点 在线工具的数据隐私指南。
JSON中嵌入文本时常见的错误有哪些?
最常见的错误就是让我花了一个下午的时间:将带有未转义引用的多行文本直接粘贴到 JSON 字段中,并假设因为这两个部分都是有效的,所以整体是有效的。不是--容器有规则,内容必须遵守。
接近的第二个是 双重逃生.如果一个字符串已经逃过一次,你又逃过一次,每 \n 变成 \\n and your newlines 变成一个字面上的反斜杠-n,没有解析器会转换回来,这通常发生在一个值通过两个系统时,每个系统都有助于逃脱它,如果你的输出有可疑的运行 \\ 期望单次反斜杠的地方,你可能已经双逃了,一次不逃就会修复它。第三个陷阱是忘记了 Windows 路径 C:\Users\me 充满了反斜杠,每一个都必须成为 \\ - JSON 中一条未逃脱的道路是 "为什么我的 JSON 无效"的经典来源。混乱。
3个的修复都是一样的:让工具恰好做一次转义,在原始文本与JSON相遇的边界处,读取它显示的字符-计数摘要,以理智-检查某件事发生了变化。当您需要手动验证时,使用"用quotes"进行转义,并把结果粘贴到 json格式化程序 - 如果它解析为有效字符串,则您的转义是正确的。
一个有效的示例:在 JSON 中嵌入 HTML 片段
让我浏览一下开始这个过程的确切情况,因为看到转变曾经让规则变得坚守。说你想发送这个片段作为 body API 请求的字段:
<p>Hi "there",</p>
<p>Visit https://example.com/path</p>
JSON那篇文里三件事会打,周围两句双引号 there will各自尝试结束字符串,段落之间的换行符是一个字面控制字符json禁止在一个字符串内部。而the </p> 纯 JSON 文件中的序列是无害的,但如果该 JSON 打印在 HTML 中,则会很危险 <script> tag。将片段粘贴到 JSON 逃生/ 取消转义 工具,打开"用引号包装,"你就会得到一个单一的、有效的 JSON 字符串:引号变成 \"的,换行符变为 \n,并带有"转义斜杠"启用关闭标签成为 <\/p>。将整个报价值直接放入您的 body 字段和请求通过。
逆行一样例行公事,当队友给你发一条日志线,上面有一个JSON逃跑的 message 田野里充满了 \n 並 \"、粘贴到工具中,切换到unescape,在反斜杠没了的情况下读取原来的多行文本,因为两个操作是精确的反转,你可以将一个有效负载移出编辑它并返回,而不必担心损坏 - 字符计数摘要确认转换运行,并且任何格式错误的转义都用其位置标记,而不是默默地破坏文本。那个往返的安全性就是将从紧张的手动步骤中转义变成你可以将线连接到工作流程中并忘记的事情。
常见问题
转义JSON字符串是什么意思? JSON字符串值不能包含原始双引号、原始反斜杠或像换行符和制表符这样的原始控制字符,Escaping用反斜杠序列替换这些中的每一个- "变为",换行符变为\n,制表符变为\t- 所以文本可以放在JSON字符串内,而不会破坏周围的结构。
这与 JSON 格式化程序有何不同? JSON 格式化程序打印或缩小整个 JSON 文档并验证其结构。 此工具在单个字符串的内容上运行一级以下:它使任意文本可以安全地嵌入 JSON 值中,或将转义值解码回原始文本。 使用格式化程序作为文档,此工具用于单个字符串。
哪些角色被转义? 双引号 (")、反斜杠 (\)、反向空间 (\b)、表单进给 (\f)、换行符 (\n)、回车符 (\r) 和选项卡 (\t) 始终转义,以及 U+0020 以下的任何其他控制字符作为 \uXXXX。可选地,前斜杠变为/,每个非 ASCII 字符变为 \uXXXX。
我应该逃离正斜杠吗? 是可选的,JSON 规范同时允许/和/,所以普通的/是有效的,一个地方/很重要,在一个 HTML 里面



