JSON String Escaping คืออะไร?JSON string escaping คือกระบวนการแปลงอักขระพิเศษภายในสตริงให้เป็น escape sequence ที่ JSON parser สามารถอ่านได้โดยไม่ทำให้โครงสร้างเสียหาย ข้อกำหนด JSON (ECMA-404 / RFC 8259) กำหนดให้อักขระบางตัวภายใน string value ต้องนำหน้าด้วย backslash หากไม่ escape อย่างถูกต้อง เครื่องหมายคำพูดคู่หรือขึ้นบรรทัดใหม่ที่อยู่ในสตริงจะทำให้สตริงจบก่อนกำหนดและเกิด parse error
JSON string ทุกตัวถูกกำหนดขอบเขตด้วยเครื่องหมายคำพูดคู่ เมื่อสตริงมีเครื่องหมายคำพูดคู่ backslash หรืออักขระควบคุม (U+0000 ถึง U+001F) อักขระนั้นต้องถูกแทนที่ด้วย escape sequence ตัวอย่างเช่น ขึ้นบรรทัดใหม่กลายเป็น \n, tab กลายเป็น \t และเครื่องหมายคำพูดคู่กลายเป็น \" นอกจากนี้ยังสามารถแทน Unicode code point ใดๆ ด้วย \uXXXX โดย XXXX คือค่าเลขฐานสิบหกสี่หลัก
Unescaping (การดำเนินการย้อนกลับ) แปลง backslash sequence กลับเป็นอักขระดั้งเดิม ใช้เมื่อได้รับ JSON payload ที่ string value ถูก escape ซ้อนกัน หรือเมื่อต้องการดึงข้อความดิบจาก JSON log entry เพื่อแสดงใน UI หรือ terminal pipeline การรวมรวมข้อมูล log พบปัญหานี้บ่อยครั้ง: เมื่อข้อความที่เข้ารหัส JSON ถูกเก็บเป็น string value ภายใน JSON document อีกชั้น backslash ทุกตัวในสตริงชั้นในจะถูก escape ซ้ำ
ทำไมต้องใช้เครื่องมือ JSON Escape?การเพิ่มหรือลบ backslash ด้วยมือเป็นงานที่น่าเบื่อและเกิดข้อผิดพลาดได้ง่าย โดยเฉพาะเมื่อจัดการกับข้อความหลายบรรทัด path ของไฟล์ หรือ code snippet ที่ฝังอยู่ เครื่องมือ escape เฉพาะทางจัดการ edge case ที่การแก้ไขด้วยมือมักพลาด
🔒 ประมวลผลแบบ privacy-first
สตริงของคุณไม่เคยออกจากเบราว์เซอร์ การ escape และ unescape ทั้งหมดทำงานภายในเครื่องใน JavaScript โดยไม่มีการเรียกเซิร์ฟเวอร์ ข้อมูลละเอียดอ่อนเช่น API key หรือ token จึงอยู่ในเครื่องของคุณ
⚡ แปลงได้ทันที
วางข้อความใดๆ แล้วรับผลลัพธ์ JSON ที่ escape แล้วอย่างถูกต้องภายในมิลลิวินาที ไม่ต้องรอ round trip ไปเซิร์ฟเวอร์ระยะไกล
🛡️ ไม่ต้องสมัครหรือติดตั้ง
เปิดหน้าเว็บแล้วเริ่ม escape ได้เลย ไม่มีฟอร์มลงทะเบียน ไม่มี browser extension ไม่มี CLI tool ให้ติดตั้ง รองรับทุกอุปกรณ์ที่มีเบราว์เซอร์สมัยใหม่
📋 รองรับอักขระครบถ้วน
รองรับ escape ทั้งหมดที่ JSON กำหนด: เครื่องหมายคำพูดคู่ backslash อักขระควบคุม (U+0000 ถึง U+001F) และ Unicode sequence รวมถึงอีโมจิและอักขระ CJK
กรณีการใช้งาน JSON String Escapeพัฒนาฝั่ง frontend
Escape เนื้อหาที่ผู้ใช้สร้างก่อนฝังใน JSON payload ที่ส่งผ่าน fetch หรือ XMLHttpRequest ป้องกัน request ที่ผิดพลาดเมื่อผู้ใช้พิมพ์เครื่องหมายคำพูด ขึ้นบรรทัดใหม่ หรืออีโมจิ
งาน backend API
สร้าง JSON response body ในภาษาที่ไม่ escape สตริงอัตโนมัติ (shell script, stored procedure ใน SQL, template engine) วางสตริงดิบแล้วคัดลอกเวอร์ชันที่ escape แล้ว
DevOps และการตั้งค่า
ฝัง PEM block ของใบรับรองหลายบรรทัด SSH key หรือ shell script ลงใน JSON config ของ Terraform, CloudFormation หรือ Kubernetes ConfigMap โดยไม่ทำให้โครงสร้าง JSON เสียหาย
QA และการทดสอบ
สร้าง test fixture ที่มีอักขระ edge case: tab, null byte, Unicode surrogate pair และสตริงที่ escape ซ้อนกัน เพื่อตรวจสอบว่า parser ของคุณจัดการได้ถูกต้อง
วิศวกรรมข้อมูล
ทำความสะอาด log entry ที่ escape ซ้ำจาก Elasticsearch, CloudWatch หรือ Datadog unescape สตริงเพื่อกู้คืนข้อความต้นฉบับสำหรับวิเคราะห์หรือนำเข้าใหม่
เรียนรู้ JSON
ดูว่าอักขระใดบ้างที่ต้องถูก escape ตามข้อกำหนด JSON มีประโยชน์สำหรับผู้ที่กำลังศึกษา ECMA-404 หรือสร้าง JSON parser ของตัวเอง
ตารางอ้างอิง JSON Escape Sequenceข้อกำหนด JSON กำหนด escape บังคับ 2 ตัวได้แก่เครื่องหมายคำพูดคู่และ backslash และ escape sequence สั้นๆ 6 ตัวสำหรับอักขระควบคุมที่ใช้บ่อย อักขระควบคุมอื่นๆ (U+0000 ถึง U+001F) ต้องใช้รูปแบบ \uXXXX อักขระที่สูงกว่า U+FFFF (เช่นอีโมจิ) สามารถแทนได้ด้วย UTF-16 surrogate pair: \uD83D\uDE00
อักขระ คำอธิบาย รูปแบบที่ 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
JSON Escaping เทียบกับ JSON Encodingนักพัฒนามักสับสนระหว่างการ escape สตริงกับการ encode JSON document ทั้งฉบับ
String Escaping
ดำเนินการกับข้อความภายใน JSON string value แทนที่อักขระพิเศษด้วย backslash sequence เพื่อให้สตริงยังคงถูกต้องภายในเครื่องหมายคำพูดคู่ อินพุต: ข้อความดิบ เอาต์พุต: ข้อความที่ escape แล้ว (ยังต้องการเครื่องหมายคำพูดล้อมรอบเพื่อให้เป็น JSON ที่ถูกต้อง)
JSON Encoding (Serialization)
แปลง data structure ทั้งหมด (object, array, number, boolean, null) เป็น JSON text ตามรูปแบบที่กำหนด การ escape สตริงเป็นขั้นตอนหนึ่งในกระบวนการที่ใหญ่กว่านี้ อินพุต: data structure เอาต์พุต: JSON document ที่สมบูรณ์
ตัวอย่างโค้ดภาษาหลักทุกภาษามีฟังก์ชันในตัวสำหรับงานนี้ ตัวอย่างใน JavaScript, Python, Go และ jq:
JavaScript (browser / Node.js) Copy
// 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 Copy
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 Copy
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) Copy
# 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" คำถามที่พบบ่อยอักขระใดบ้างที่ต้องถูก escape ใน JSON string?
ข้อกำหนด JSON (RFC 8259) กำหนดให้ escape เครื่องหมายคำพูดคู่ (\"), backslash (\\) และอักขระควบคุมทั้งหมดตั้งแต่ U+0000 ถึง U+001F forward slash (/) อาจ escape เป็น \/ ได้แต่ไม่บังคับ อักขระ Unicode อื่นๆ รวมถึงข้อความที่ไม่ใช่ ASCII และอีโมจิสามารถปรากฏโดยไม่ escape ได้ตราบเท่าที่ document ใช้ UTF-8
JSON escape ต่างจาก JSON stringify อย่างไร?
JSON.stringify() ใน JavaScript แปลงค่า JavaScript ทั้งหมดเป็น JSON string โดยเพิ่มเครื่องหมายคำพูดคู่ล้อมรอบและ escape อักขระพิเศษภายใน JSON escaping หมายถึงการแทนที่อักขระพิเศษด้วย backslash sequence ในระดับอักขระโดยเฉพาะ การเรียก JSON.stringify() กับ string จะทำการ escape เป็นส่วนหนึ่งของกระบวนการ serialize
จะ escape ขึ้นบรรทัดใหม่ใน JSON ได้อย่างไร?
แทนที่อักขระขึ้นบรรทัดใหม่ (U+000A) ด้วยลำดับสองอักขระ \n ในทำนองเดียวกัน carriage return (U+000D) กลายเป็น \r หากใช้ JSON.stringify() หรือ json.dumps() ใน Python การแทนที่เหล่านี้จะเกิดขึ้นอัตโนมัติ
ทำไม JSON string ของฉันถึง escape ซ้ำ?
การ escape ซ้ำเกิดขึ้นเมื่อ serialize สตริงสองครั้ง ตัวอย่างเช่น การเรียก JSON.stringify() กับสตริงที่มี escape sequence อยู่แล้วจะ escape backslash อีกครั้ง: \n กลายเป็น \\n แก้ไขโดย parse สตริงครั้งหนึ่งด้วย JSON.parse() ก่อน re-serialize หรือตรวจสอบ pipeline ว่ามีขั้นตอน encode ที่ซ้ำซ้อนหรือไม่
ใช้เครื่องหมายคำพูดเดี่ยวใน JSON string ได้ไหม?
ไม่ได้ ข้อกำหนด JSON กำหนดให้ใช้เครื่องหมายคำพูดคู่สำหรับ string value และ property name ทั้งหมด เครื่องหมายคำพูดเดี่ยวไม่ใช่ JSON ที่ถูกต้องและจะทำให้เกิด parse error หากข้อมูลต้นทางมีเครื่องหมายคำพูดเดี่ยว ไม่จำเป็นต้อง escape ภายใน JSON string ที่ใช้เครื่องหมายคำพูดคู่ เพราะเครื่องหมายคำพูดเดี่ยวเป็นอักขระทั่วไปในบริบทนั้น
การใส่อักขระ UTF-8 ที่ไม่ escape ใน JSON ปลอดภัยหรือไม่?
ปลอดภัย ตราบเท่าที่ JSON document เข้ารหัสด้วย UTF-8 ซึ่ง RFC 8259 กำหนดเป็น encoding เริ่มต้นและแนะนำ อักขระเช่นตัวอักษรที่มี accent, CJK ideograph และอีโมจิสามารถปรากฏในสตริงโดยตรงโดยไม่ต้อง escape ด้วย \uXXXX บางระบบเก่าคาดหวัง JSON ที่เป็น ASCII เท่านั้น ในกรณีนั้นให้ใช้ตัวเลือก ensure_ascii ใน Python หรือ flag ที่คล้ายกันในภาษาของคุณ
จะ escape อีโมจิใน JSON ได้อย่างไร?
อีโมจิที่อยู่เหนือ U+FFFF แทนใน JSON ด้วย UTF-16 surrogate pair ตัวอย่างเช่น grinning face (U+1F600) กลายเป็น \uD83D\uDE00 Serializer ส่วนใหญ่จัดการเรื่องนี้อัตโนมัติ หากเขียน JSON ด้วยมือหรือ tooling รองรับเฉพาะ Basic Multilingual Plane ให้ใช้ surrogate pair notation มิฉะนั้นสามารถใส่อีโมจิโดยตรงเป็นอักขระ UTF-8