ترميز سلاسل JSON هو عملية تحويل الأحرف الخاصة داخل السلسلة النصية إلى تسلسلات ترميز يستطيع محلل JSON قراءتها دون كسر البنية. تشترط مواصفات JSON (ECMA-404 / RFC 8259) أن تسبق بعض الأحرف داخل قيم السلاسل شرطةٌ مائلة عكسية. وبدون الترميز الصحيح، فإن علامة اقتباس مزدوجة حرفية أو سطراً جديداً داخل سلسلة سيُنهي السلسلة مبكراً ويُنتج خطأ في التحليل.
كل سلسلة JSON تُحدَّد بعلامات اقتباس مزدوجة. حين تحتوي السلسلة ذاتها على علامة اقتباس مزدوجة أو شرطة مائلة عكسية أو حرف تحكم (من U+0000 إلى U+001F)، يجب استبدال الحرف بتسلسل الترميز المقابل. على سبيل المثال، يصبح السطر الجديد الحرفي \n، والجدولة \t، وعلامة الاقتباس المزدوجة \". كما يمكن تمثيل أي نقطة ترميز Unicode بالصيغة \uXXXX، حيث XXXX هي القيمة الست عشرية المكونة من أربعة أرقام.
فك الترميز (العملية العكسية) يحول تسلسلات الشرطة المائلة العكسية تلك إلى أحرافها الأصلية. استخدمه حين تتلقى حمولة JSON تحتوي فيها قيم السلاسل على ترميز مضاعف، أو حين تحتاج إلى استخراج نص خام من إدخال سجل JSON لعرضه في واجهة مستخدم أو طرفية. تصطدم بخطوط أنابيب تجميع السجلات بهذا الأمر باستمرار: حين تُخزَّن رسالة مشفرة بـ JSON كقيمة سلسلة داخل مستند JSON آخر، تصل كل شرطة مائلة عكسية في السلسلة الداخلية مضاعفة.
لماذا استخدام أداة ترميز JSON؟
إضافة الشرطات المائلة العكسية أو إزالتها يدوياً أمر مرهق وعرضة للأخطاء، خاصة عند التعامل مع نصوص متعددة الأسطر أو مسارات الملفات أو مقتطفات الكود المضمنة. تُعالج الأداة المتخصصة الحالات الطرفية التي يُفوّتها التحرير اليدوي.
🔒
معالجة تحترم خصوصيتك
سلاسلك لا تغادر متصفحك قط. يعمل الترميز وفك الترميز محلياً بالكامل في JavaScript دون أي طلبات للخادم، فتبقى البيانات الحساسة كمفاتيح API والرموز المميزة على جهازك.
⚡
تحويل فوري
الصق أي نص واحصل على مخرج JSON مُرمَّز بشكل صحيح في أجزاء من الثانية. بدون إرسال بياناتك لأي خادم بعيد.
🛡️
لا حساب ولا تثبيت
افتح الصفحة وابدأ الترميز. لا استمارة تسجيل، ولا إضافة متصفح، ولا أداة سطر أوامر تحتاج لتثبيتها. يعمل على أي جهاز بمتصفح حديث.
📋
تغطية كاملة للأحرف
يعالج جميع تسلسلات الترميز المطلوبة في JSON: علامات الاقتباس المزدوجة، الشرطات المائلة العكسية، أحرف التحكم (من U+0000 إلى U+001F)، ومتواليات Unicode بما فيها الرموز التعبيرية (emoji) وأحرف CJK.
حالات استخدام ترميز سلاسل JSON
تطوير الواجهة الأمامية
رمّز المحتوى الذي يُنشئه المستخدم قبل تضمينه في حمولة JSON مُرسَلة عبر fetch أو XMLHttpRequest. يمنع الطلبات المشوهة حين يكتب المستخدمون علامات اقتباس أو أسطراً جديدة أو رموزاً تعبيرية.
تطوير واجهات API الخلفية
أنشئ أجسام استجابات JSON في لغات لا تُرمِّز السلاسل تلقائياً (سكريبتات Shell، الإجراءات المخزنة في SQL، محركات القوالب). الصق السلسلة الخام وانسخ النسخة المُرمَّزة.
DevOps والإعداد
ضمّن كتل PEM للشهادات متعددة الأسطر، ومفاتيح SSH، أو سكريبتات Shell في ملفات إعداد JSON لـ Terraform أو CloudFormation أو Kubernetes ConfigMaps دون كسر بنية JSON.
ضمان الجودة والاختبار
أنشئ بيانات اختبار تتضمن أحرفاً طرفية: جدولات، وحدات بايت فارغة، أزواج بديلة Unicode، وسلاسل مُرمَّزة متداخلة. تحقق من أن محللك يتعامل معها بشكل صحيح.
هندسة البيانات
نظّف إدخالات السجلات المُرمَّزة مضاعفاً من Elasticsearch أو CloudWatch أو Datadog. افك ترميز السلسلة لاسترداد الرسالة الأصلية للتحليل أو إعادة الاستيعاب.
تعلم JSON
اطلع على الأحرف التي تتطلب ترميزاً وفق مواصفات JSON بالضبط. مفيد للطلاب الذين يتعمقون في ECMA-404 أو يبنون محلل JSON خاصاً بهم.
مرجع تسلسلات ترميز JSON
تُحدد مواصفات JSON بالضبط تسلسلَي ترميز إلزاميَّين (علامة الاقتباس المزدوجة والشرطة المائلة العكسية) وستة تسلسلات قصيرة لأحرف التحكم الشائعة. يجب استخدام الصيغة \uXXXX لجميع أحرف التحكم الأخرى (من U+0000 إلى U+001F). أما الأحرف فوق U+FFFF (كالرموز التعبيرية) فيمكن تمثيلها كزوج بديل UTF-16: \uD83D\uDE00.
الحرف
الوصف
الصيغة المُرمَّزة
"
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 مقابل تشفير JSON
يخلط المطورون أحياناً بين ترميز سلسلة ما وتشفير مستند JSON كامل.
ترميز السلسلة
يعمل على النص داخل قيمة سلسلة JSON. يستبدل الأحرف الخاصة بتسلسلات الشرطة المائلة العكسية كي تظل السلسلة صالحة داخل علامات الاقتباس المزدوجة. المدخل: نص خام. المخرج: نص مُرمَّز (لا يزال يحتاج إلى علامات اقتباس محيطة ليكون JSON صالحاً).
تشفير JSON (التسلسل)
يحول بنية بيانات كاملة (كائنات، مصفوفات، أرقام، قيم منطقية، nulls) إلى تمثيل نصي بصيغة JSON. ترميز السلسلة خطوة واحدة ضمن هذه العملية الأشمل. المدخل: بنية بيانات. المخرج: مستند JSON كامل.
أمثلة برمجية
لكل لغة رئيسية دوال مدمجة لهذا الغرض. أمثلة بـ JavaScript وPython وGo و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"
الأسئلة الشائعة
ما الأحرف التي يجب ترميزها في سلسلة JSON؟
تشترط مواصفات JSON (RFC 8259) ترميز علامة الاقتباس المزدوجة (\")، والشرطة المائلة العكسية (\\)، وجميع أحرف التحكم من U+0000 إلى U+001F. يجوز ترميز الشرطة المائلة الأمامية (/) بالصيغة \/ لكن ذلك اختياري. أما سائر أحرف Unicode، بما فيها النصوص غير ASCII والرموز التعبيرية، فيمكن أن تظهر دون ترميز طالما يستخدم المستند ترميز UTF-8.
ما الفرق بين ترميز JSON وJSON.stringify()؟
تُسلسل JSON.stringify() في JavaScript قيمة JavaScript كاملة إلى سلسلة JSON، مضيفةً علامات اقتباس مزدوجة محيطة ومُرمِّزةً الأحرف الخاصة في الداخل. أما ترميز JSON فيشير تحديداً إلى الاستبدال على مستوى الحرف بتسلسلات الشرطة المائلة العكسية. استدعاء JSON.stringify() على سلسلة ينفّذ الترميز كجزء من عملية التسلسل.
كيف أُرمِّز سطراً جديداً في JSON؟
استبدل حرف السطر الجديد الحرفي (U+000A) بالتسلسل المكون من حرفين \n. وبالمثل، يصبح حرف إرجاع الحامل (U+000D) هو \r. إن كنت تستخدم JSON.stringify() أو json.dumps() في Python، تحدث هذه الاستبدالات تلقائياً.
لماذا سلسلة JSON الخاصة بي مُرمَّزة مضاعفاً؟
يحدث الترميز المضاعف حين تُسلسَل سلسلة مرتين. على سبيل المثال، استدعاء JSON.stringify() على سلسلة تحتوي بالفعل على تسلسلات ترميز سيُرمِّز الشرطات المائلة العكسية مجدداً: يصبح \n هو \\n. لإصلاح ذلك، حلِّل السلسلة مرة واحدة بـ JSON.parse() قبل إعادة تسلسلها، أو افحص خط الأنابيب لديك بحثاً عن خطوات ترميز زائدة.
هل يمكنني استخدام علامات اقتباس مفردة في سلاسل JSON؟
لا. تشترط مواصفات JSON علامات الاقتباس المزدوجة لجميع قيم السلاسل وأسماء الخصائص. علامات الاقتباس المفردة ليست JSON صالحاً وستُسبب خطأ في التحليل. إن احتوت بياناتك المصدرية على علامات اقتباس مفردة، فهي لا تحتاج إلى ترميز داخل سلسلة JSON محاطة بعلامات اقتباس مزدوجة لأنها أحرف عادية في ذلك السياق.
هل من الآمن وضع أحرف UTF-8 غير مُرمَّزة في JSON؟
نعم، طالما يُشفَّر مستند JSON بـ UTF-8، وهو ما يُحدده RFC 8259 بوصفه الترميز الافتراضي والموصى به. يمكن للأحرف كالحروف المُعلَّمة وأحرف CJK والرموز التعبيرية أن تظهر مباشرةً في السلسلة دون ترميز \uXXXX. تتوقع بعض الأنظمة القديمة JSON بأحرف ASCII فحسب؛ في هذه الحالة استخدم خيار ensure_ascii في Python أو خياراً مماثلاً في لغتك.
كيف أُرمِّز رمزاً تعبيرياً في JSON؟
الرموز التعبيرية التي تتجاوز U+FFFF تُمثَّل في JSON باستخدام زوج بديل UTF-16. على سبيل المثال، يصبح وجه الابتسامة العريضة (U+1F600) هو \uD83D\uDE00. تتعامل معظم أدوات التسلسل مع هذا تلقائياً. إن كنت تكتب JSON يدوياً أو تدعم أدواتك المستوى الأساسي متعدد اللغات فحسب، استخدم صيغة الزوج البديل. وإلا، أدرج الرمز التعبيري مباشرةً كحرف UTF-8.