Escape chuỗi JSON là quá trình chuyển đổi các ký tự đặc biệt bên trong chuỗi thành các chuỗi escape mà trình phân tích cú pháp JSON có thể đọc mà không làm hỏng cấu trúc. Đặc tả JSON (ECMA-404 / RFC 8259) yêu cầu một số ký tự bên trong giá trị chuỗi phải được đặt trước bởi dấu gạch chéo ngược. Nếu không escape đúng cách, dấu ngoặc kép hoặc ký tự xuống dòng xuất hiện trực tiếp trong chuỗi sẽ kết thúc chuỗi sớm và gây ra lỗi phân tích cú pháp.
Mỗi chuỗi JSON được phân định bằng dấu ngoặc kép. Khi bản thân chuỗi chứa dấu ngoặc kép, dấu gạch chéo ngược, hoặc ký tự điều khiển (U+0000 đến U+001F), ký tự đó phải được thay thế bằng chuỗi escape tương ứng. Ví dụ, ký tự xuống dòng trở thành \n, tab trở thành \t, và dấu ngoặc kép trở thành \". Bất kỳ điểm mã Unicode nào cũng có thể được biểu diễn dưới dạng \uXXXX, trong đó XXXX là giá trị thập lục phân bốn chữ số.
Unescape (thao tác ngược lại) chuyển đổi các chuỗi dấu gạch chéo ngược đó trở về ký tự gốc. Dùng thao tác này khi bạn nhận được một payload JSON trong đó các giá trị chuỗi bị escape kép, hoặc khi bạn cần trích xuất văn bản thô từ một bản ghi log JSON để hiển thị trên giao diện người dùng hay terminal. Các pipeline tổng hợp log thường gặp vấn đề này: khi một thông báo được mã hóa JSON được lưu trữ dưới dạng giá trị chuỗi bên trong một tài liệu JSON khác, mỗi dấu gạch chéo ngược trong chuỗi bên trong sẽ bị nhân đôi.
Tại Sao Dùng Công Cụ JSON Escape?
Việc thêm hoặc xóa dấu gạch chéo ngược thủ công rất tẻ nhạt và dễ gây lỗi, đặc biệt khi xử lý văn bản nhiều dòng, đường dẫn tệp, hoặc các đoạn code nhúng. Một công cụ escape chuyên dụng xử lý các trường hợp ngoại lệ mà việc chỉnh sửa tay thường bỏ sót.
🔒
Ưu Tiên Quyền Riêng Tư
Chuỗi của bạn không bao giờ rời khỏi trình duyệt. Toàn bộ quá trình escape và unescape chạy cục bộ trong JavaScript mà không có lệnh gọi máy chủ, vì vậy dữ liệu nhạy cảm như API key hay token vẫn ở trên máy của bạn.
⚡
Chuyển Đổi Tức Thì
Dán bất kỳ văn bản nào và nhận kết quả JSON đã được escape chính xác trong vài mili giây. Không cần chờ một vòng đi đến máy chủ từ xa.
🛡️
Không Cần Tài Khoản hay Cài Đặt
Mở trang và bắt đầu escape. Không cần đăng ký, không cần tiện ích mở rộng trình duyệt, không cần cài đặt công cụ dòng lệnh. Hoạt động trên mọi thiết bị có trình duyệt hiện đại.
📋
Hỗ Trợ Đầy Đủ Các Ký Tự
Xử lý tất cả các escape bắt buộc theo JSON: dấu ngoặc kép, dấu gạch chéo ngược, ký tự điều khiển (U+0000 đến U+001F), và chuỗi Unicode bao gồm emoji và ký tự CJK.
Các Trường Hợp Sử Dụng JSON String Escape
Phát Triển Frontend
Escape nội dung do người dùng tạo ra trước khi nhúng vào payload JSON gửi qua fetch hoặc XMLHttpRequest. Ngăn chặn các yêu cầu bị lỗi khi người dùng nhập dấu ngoặc kép, ký tự xuống dòng, hoặc emoji.
Làm Việc Với Backend API
Xây dựng nội dung phản hồi JSON trong các ngôn ngữ không tự động escape chuỗi (shell script, stored procedure SQL, template engine). Dán chuỗi thô, sao chép phiên bản đã được escape.
DevOps Và Cấu Hình
Nhúng các block PEM chứng chỉ nhiều dòng, SSH key, hoặc shell script vào tệp cấu hình JSON cho Terraform, CloudFormation, hoặc Kubernetes ConfigMap mà không làm hỏng cấu trúc JSON.
QA Và Kiểm Thử
Tạo các bộ fixture kiểm thử chứa các ký tự biên: tab, byte null, cặp surrogate Unicode, và chuỗi escape lồng nhau. Xác minh rằng trình phân tích cú pháp của bạn xử lý chúng đúng cách.
Kỹ Thuật Dữ Liệu
Làm sạch các bản ghi log bị escape kép từ Elasticsearch, CloudWatch, hoặc Datadog. Unescape chuỗi để khôi phục thông báo gốc để phân tích hoặc nạp lại.
Học JSON
Xem chính xác những ký tự nào yêu cầu escape theo đặc tả JSON. Hữu ích cho sinh viên đang tìm hiểu ECMA-404 hoặc xây dựng trình phân tích cú pháp JSON của riêng mình.
Tham Chiếu Chuỗi Escape JSON
Đặc tả JSON định nghĩa chính xác hai escape bắt buộc (dấu ngoặc kép và dấu gạch chéo ngược) và sáu chuỗi escape ngắn cho các ký tự điều khiển phổ biến. Tất cả các ký tự điều khiển khác (U+0000 đến U+001F) phải dùng dạng \uXXXX. Các ký tự trên U+FFFF (như emoji) có thể được biểu diễn dưới dạng cặp surrogate UTF-16: \uD83D\uDE00.
Ký tự
Mô tả
Dạng escape
"
Double quote
\"
\
Backslash
\\
/
Forward slash
\/ (optional)
\n
Newline (LF)
\n
\r
Carriage return
\r
\t
Tab
\t
\b
Backspace
\b
\f
Form feed
\f
U+0000–U+001F
Control characters
\u0000–\u001F
U+0080+
Non-ASCII (e.g. emoji)
\uXXXX or raw UTF-8
Escape Chuỗi JSON vs. Mã Hóa JSON
Các lập trình viên đôi khi nhầm lẫn giữa escape chuỗi và mã hóa toàn bộ tài liệu JSON.
Escape Chuỗi
Thao tác trên văn bản bên trong một giá trị chuỗi JSON. Thay thế các ký tự đặc biệt bằng chuỗi dấu gạch chéo ngược để chuỗi vẫn hợp lệ trong dấu ngoặc kép. Đầu vào: văn bản thô. Đầu ra: văn bản đã được escape (vẫn cần dấu ngoặc kép bao quanh để là JSON hợp lệ).
Mã Hóa JSON (Serialization)
Chuyển đổi toàn bộ cấu trúc dữ liệu (đối tượng, mảng, số, giá trị boolean, null) thành biểu diễn văn bản JSON. Escape chuỗi là một bước trong quá trình lớn hơn này. Đầu vào: cấu trúc dữ liệu. Đầu ra: tài liệu JSON hoàn chỉnh.
Ví Dụ Code
Mọi ngôn ngữ lớn đều có hàm tích hợp cho việc này. Ví dụ trong JavaScript, Python, Go và jq:
JavaScript (browser / Node.js)
// JSON.stringify escapes a value and wraps it in quotes
JSON.stringify('Line 1\nLine 2') // → '"Line 1\\nLine 2"'
// To get just the inner escaped string (no surrounding quotes):
const escaped = JSON.stringify('She said "hello"').slice(1, -1)
// → 'She said \\"hello\\"'
// Parsing reverses the escaping
JSON.parse('"tabs\\tand\\nnewlines"') // → 'tabs\tand\nnewlines'
// Handling Unicode: emoji in JSON
JSON.stringify('Price: 5\u20ac') // → '"Price: 5\u20ac"' (raw euro sign)
Python
import json
# json.dumps escapes and quotes a string
json.dumps('Line 1\nLine 2') # → '"Line 1\\nLine 2"'
# Ensure ASCII: replace non-ASCII with \uXXXX sequences
json.dumps('Caf\u00e9', ensure_ascii=True) # → '"Caf\\u00e9"'
# Keep UTF-8 characters as-is (default in Python 3)
json.dumps('Caf\u00e9', ensure_ascii=False) # → '"Caf\u00e9"'
# Unescape by round-tripping through json.loads
json.loads('"She said \\"hello\\""') # → 'She said "hello"'
Go
package main
import (
"encoding/json"
"fmt"
)
func main() {
// json.Marshal escapes a Go string for JSON
raw := "Line 1\nLine 2\tindented"
b, _ := json.Marshal(raw)
fmt.Println(string(b))
// → "Line 1\nLine 2\tindented"
// Unescape with json.Unmarshal
var out string
json.Unmarshal([]byte(`"She said \"hello\""`), &out)
fmt.Println(out)
// → She said "hello"
}
CLI (jq)
# Escape a raw string into a JSON-safe value
echo 'Line 1
Line 2 with tab' | jq -Rs '.'
# → "Line 1\nLine 2\twith tab\n"
# Unescape a JSON string back to raw text
echo '"She said \"hello\""' | jq -r '.'
# → She said "hello"
Câu Hỏi Thường Gặp
Những ký tự nào phải được escape trong chuỗi JSON?
Đặc tả JSON (RFC 8259) yêu cầu escape dấu ngoặc kép (\"), dấu gạch chéo ngược (\\), và tất cả ký tự điều khiển từ U+0000 đến U+001F. Dấu gạch chéo xuôi (/) có thể được escape thành \/ nhưng điều này là tùy chọn. Tất cả các ký tự Unicode khác, bao gồm văn bản không phải ASCII và emoji, có thể xuất hiện không cần escape miễn là tài liệu sử dụng mã hóa UTF-8.
Sự khác biệt giữa JSON escape và JSON stringify là gì?
JSON.stringify() trong JavaScript chuyển đổi toàn bộ giá trị JavaScript thành chuỗi JSON, thêm dấu ngoặc kép bao quanh và escape các ký tự đặc biệt bên trong. JSON escaping đề cập cụ thể đến việc thay thế ở cấp ký tự các ký tự đặc biệt bằng chuỗi dấu gạch chéo ngược. Gọi JSON.stringify() trên một chuỗi thực hiện escape như một phần của quá trình serialization.
Làm thế nào để escape ký tự xuống dòng trong JSON?
Thay thế ký tự xuống dòng thực (U+000A) bằng chuỗi hai ký tự \n. Tương tự, carriage return (U+000D) trở thành \r. Nếu bạn dùng JSON.stringify() hoặc json.dumps() trong Python, các thay thế này xảy ra tự động.
Tại sao chuỗi JSON của tôi bị escape kép?
Escape kép xảy ra khi một chuỗi được serialize hai lần. Ví dụ, gọi JSON.stringify() trên một chuỗi đã chứa chuỗi escape sẽ escape các dấu gạch chéo ngược thêm một lần nữa: \n trở thành \\n. Để khắc phục, hãy phân tích chuỗi một lần với JSON.parse() trước khi serialize lại, hoặc kiểm tra pipeline của bạn để tìm các bước mã hóa dư thừa.
Tôi có thể dùng dấu ngoặc đơn trong chuỗi JSON không?
Không. Đặc tả JSON yêu cầu dấu ngoặc kép cho tất cả giá trị chuỗi và tên thuộc tính. Dấu ngoặc đơn không phải là JSON hợp lệ và sẽ gây ra lỗi phân tích cú pháp. Nếu dữ liệu nguồn của bạn chứa dấu ngoặc đơn, chúng không cần escape trong chuỗi có dấu ngoặc kép JSON vì dấu ngoặc đơn là ký tự thông thường trong ngữ cảnh đó.
Có an toàn không khi đặt ký tự UTF-8 chưa được escape trong JSON?
Có, miễn là tài liệu JSON được mã hóa bằng UTF-8, mà RFC 8259 quy định là mã hóa mặc định và được khuyến nghị. Các ký tự như chữ có dấu, ký tự CJK, và emoji có thể xuất hiện trực tiếp trong chuỗi mà không cần escape \uXXXX. Một số hệ thống cũ chỉ hỗ trợ JSON toàn ASCII; trong trường hợp đó, hãy dùng tùy chọn ensure_ascii trong Python hoặc cờ tương tự trong ngôn ngữ của bạn.
Làm thế nào để escape emoji trong JSON?
Emoji trên U+FFFF được biểu diễn trong JSON bằng cặp surrogate UTF-16. Ví dụ, mặt cười (U+1F600) trở thành \uD83D\uDE00. Hầu hết các bộ serialize xử lý điều này tự động. Nếu bạn viết JSON thủ công hoặc công cụ của bạn chỉ hỗ trợ Basic Multilingual Plane, hãy dùng ký hiệu cặp surrogate. Nếu không, hãy đưa emoji trực tiếp dưới dạng ký tự UTF-8.