ترميز JSON وفك ترميزه
Marshal وUnmarshal ووسوم البُنى
ترميز JSON وفك ترميزه درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
نظرة عامة على encoding/json
تحوّل حزمة encoding/json في Go قيم Go إلى JSON، وتحوّل JSON مرة أخرى إلى قيم Go باستخدام وسمات البنى والتأمل.
json.Marshal
تحوّل json.Marshal قيمة Go إلى بايتات JSON. وتعيد خطأً للأنواع غير المدعومة، مثل القنوات والدوال والأعداد المركبة.
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
u := User{Name: "Alice", Age: 30}
data, err := json.Marshal(u)
fmt.Println(string(data)) // {"name":"Alice","age":30}json.Unmarshal
تفكّك json.Unmarshal ترميز JSON إلى قيمة Go. ويجب أن يكون الهدف مؤشرًا.
var u User
err := json.Unmarshal(data, &u)
fmt.Println(u.Name) // "Alice"وسمات البنى
استخدموا وسمات البنى json: للتحكم في أسماء الحقول، وحذف القيم الفارغة، وتخطي الحقول غير المُصدَّرة.
type Product struct {
ID int `json:"id"`
Price float64 `json:"price,omitempty"` // omit if zero
secret string // unexported: ignored
}json.Encoder / json.Decoder
للمعالجة المتدفقة، مثل أجسام استجابات وطلبات HTTP، استخدموا Encoder وDecoder بدلًا من Marshal وUnmarshal لتجنب تحميل الحمولة كاملةً في الذاكرة.
// Writing
json.NewEncoder(w).Encode(user)
// Reading
var u User
json.NewDecoder(r.Body).Decode(&u)فك الترميز إلى map[string]any
فكّوا ترميز JSON غير المعروف إلى map عام:
var m map[string]any
json.Unmarshal(data, &m)
fmt.Println(m["name"])json.Number
افتراضيًا، تُفكّ أرقام الخرائط العامة إلى float64. استخدموا decoder.UseNumber() لفكّها إلى json.Number مع الحفاظ على الدقة.
dec := json.NewDecoder(r)
dec.UseNumber()
var m map[string]any
dec.Decode(&m)الترميز المخصص
طبّقوا json.Marshaler أو json.Unmarshaler للتحكم في ترميز نوع ما وفك ترميزه، مثل تنسيقات التواريخ المخصصة.
func (d Date) MarshalJSON() ([]byte, error) {
return json.Marshal(d.Format("2006-01-02"))
}حذف الحقول
استخدموا omitempty لتخطي القيم الصفرية. واستخدموا json:"-" لاستبعاد حقل من مخرجات JSON دائمًا، بصرف النظر عن قيمته.
Hidden string `json:"-"`التعامل مع null
يفك JSON null إلى قيمة Go الصفرية للأنواع العددية، أو يضبط المؤشر على nil. ويُرمّز المؤشر nil إلى null.
الطباعة المنسقة
استخدموا json.MarshalIndent لإخراج سهل القراءة للبشر:
data, _ := json.MarshalIndent(u, "", " ")اختبار سريع
ماذا يفعل وسم البنية `json:"name,omitempty"`؟
مراجعة: ترميز JSON وفك ترميزه
النقاط الرئيسية:
- استخدموا json.Marshal وUnmarshal للبيانات الموجودة في الذاكرة، وEncoder وDecoder للدفقات
- تتحكم وسمات البنى في الأسماء وomitempty والاستبعاد
- تطبّق الأنواع المخصصة Marshaler وUnmarshaler
- استخدموا json.MarshalIndent لمخرجات التصحيح
تعلم Go مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «ترميز JSON وفك ترميزه» مجاني؟
نعم — نص درس «ترميز JSON وفك ترميزه» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «ترميز JSON وفك ترميزه»؟
Marshal وUnmarshal ووسوم البُنى تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «ترميز JSON وفك ترميزه»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- قراءة الملفات باستخدام os وbufio
- كتابة الملفات والملفات المؤقتة
- ترميز JSON وفك ترميزه
- بث JSON وCSV