许虎虎 开发者工具集

JSON 转义

输入
输出:
JSON 转义

在 JSON 格式中,转义(escaping)是为了确保字符串中的特殊字符不与 JSON 语法冲突,或者避免引发语法错误。JSON 是一种轻量级的数据交换格式,它的字符串使用双引号(" ")包围,因此需要对一些特殊字符进行转义。

常见的 JSON 转义字符
以下是 JSON 中常见的转义字符:

转义字符 描述
\\ 反斜杠字符 (\)
\" 双引号字符 (")
\b 退格符(backspace)
\f 换页符(form feed)
\n 换行符(newline)
\r 回车符(carriage return)
\t 制表符(tab)
\/ 正斜杠(/)
\uXXXX Unicode 字符,其中 XXXX 是 4 位十六进制数字
1. 字符串中的特殊字符
在 JSON 中,字符串使用双引号包围,因此需要对内部的双引号和反斜杠进行转义。如果字符串中包含这些特殊字符,会导致 JSON 解析错误。

示例:
json

{
"name": "John \"Doe\"",
"path": "C:\\Users\\John"
}
"John \"Doe\"":使用 \" 来转义双引号。
"C:\\Users\\John":使用 \\ 来转义反斜杠。
2. 换行符、回车符、制表符等
JSON 字符串中的换行符、回车符、制表符等控制字符也需要转义。

示例:
json

{
"message": "Hello,\nThis is a new line."
}
这里,\n 表示换行符。

3. Unicode 转义
JSON 支持 Unicode 转义,格式为 \u 后跟 4 位十六进制字符。这通常用于表示那些不容易输入的字符。

示例:
json

{
"emoji": "\uD83D\uDE00"
}
这里,\uD83D\uDE00 表示一个笑脸表情。

4. 斜杠的转义
虽然斜杠(/)在 JSON 中不必转义,但为了兼容某些老旧的解析器,仍然可以使用 \/ 来转义斜杠。

示例:
json

{
"url": "https:\/\/example.com"
}
在现代浏览器和 JSON 解析器中,通常不需要转义斜杠,但可以用 \/ 来确保兼容性。

5. JSON 对象和数组的转义
JSON 对象的键和值必须是字符串,而字符串中的特殊字符(如引号、反斜杠等)需要进行转义。例如:

json

{
"text": "This is a \"quote\" inside a string.",
"nested": {
"key": "value"
},
"array": ["item1", "item2"]
}
6. JSON 转义的应用
在很多编程语言中,可以自动处理 JSON 转义,通过内置的 JSON 库来完成转义和解析。以下是一些常见语言的例子:

Python:
Python 提供了 json 库,可以轻松地将数据编码为 JSON 字符串,并自动处理转义。

python

import json

data = {"name": "John \"Doe\"", "path": "C:\\Users\\John"}
json_data = json.dumps(data)
print(json_data)
输出:

json

{"name": "John \"Doe\"", "path": "C:\\Users\\John"}
JavaScript:
JavaScript 提供了 JSON.stringify() 方法,可以将对象转化为 JSON 字符串,并自动转义。

javascript

let obj = {
name: 'John "Doe"',
path: 'C:\\Users\\John'
};
let jsonString = JSON.stringify(obj);
console.log(jsonString);
输出:

json

{"name":"John \"Doe\"","path":"C:\\Users\\John"}
Java:
在 Java 中,可以使用 ObjectMapper 类来处理 JSON 转义。

java

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(new Person("John \"Doe\"", "C:\\Users\\John"));
System.out.println(json);
}
}

class Person {
public String name;
public String path;

public Person(String name, String path) {
this.name = name;
this.path = path;
}
}
输出:

json

{"name":"John \"Doe\"","path":"C:\\Users\\John"}
7. 反转义
在某些情况下,可能需要将 JSON 字符串中的转义字符反转义,恢复为原始的字符。例如,在 JavaScript 中,可以使用 JSON.parse() 方法将 JSON 字符串解析为对象:

javascript

let jsonString = '{"name":"John \"Doe\"","path":"C:\\\\Users\\\\John"}';
let parsedData = JSON.parse(jsonString);
console.log(parsedData.name); // 输出: John "Doe"
console.log(parsedData.path); // 输出: C:\Users\John
总结:
转义字符:JSON 中的字符串必须对某些特殊字符(如双引号、反斜杠、换行符等)进行转义。
Unicode 转义:使用 \uXXXX 格式来表示 Unicode 字符。
编程语言支持:现代编程语言中的 JSON 库通常会自动处理 JSON 字符串的转义和解析。