0Pricing
Go Academy · درس

مراجعة encoding/json

نفّذ تسلسل JSON وإلغاء تسلسله

مراجعة encoding/json درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

JSON في Go

يُعد JSON تنسيق البيانات الأكثر شيوعًا لواجهات API. وتحول حزمة Go القياسية encoding/json بين قيم Go ونص JSON.

Marshal: من Go إلى JSON

تحوّل json.Marshal قيمة Go إلى شريحة بايتات بتنسيق JSON. حوّلوها إلى سلسلة نصية لطباعتها.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1, "b": 2}
	b, _ := json.Marshal(data)
	fmt.Println(string(b))
}

تسلسل بنية

تُسلسَل البنى حقلًا بعد حقل. وتصبح الحقول المصدَّرة مفاتيح JSON.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := json.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

Unmarshal: من JSON إلى Go

تحلل json.Unmarshal بايتات JSON إلى قيمة Go. مرّروا مؤشرًا حتى تتمكن من تعبئة متغيركم.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	var u User
	json.Unmarshal([]byte("{\"Name\":\"Bob\",\"Age\":25}"), &u)
	fmt.Println(u)
}

وسوم لأسماء المفاتيح

استخدموا وسوم json للتحكم في أسماء المفاتيح، كما تناولنا سابقًا. هنا يُطابَق Name مع مفتاح JSON الذي يحمل الاسم.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
}

func main() {
	b, _ := json.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

تحققوا دائمًا من الأخطاء

تُرجع كل من Marshal وUnmarshal خطأً. في الشيفرة الفعلية، لا تتجاهلوه أبدًا؛ إذ تؤدي JSON غير الصحيحة أو الأنواع غير المدعومة إلى أخطاء.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v int
	err := json.Unmarshal([]byte("not json"), &v)
	fmt.Println(err)
}

فك التسلسل إلى خرائط

عندما لا تعرفون البنية مسبقًا، أجروا فك التسلسل إلى map[string]interface{}.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var m map[string]interface{}
	json.Unmarshal([]byte("{\"x\":1,\"y\":\"hi\"}"), &m)
	fmt.Println(m["x"], m["y"])
}

الشرائح والمصفوفات

تُطابَق مصفوفات JSON مع شرائح Go. ويؤدي إجراء التسلسل على شريحة إلى مصفوفة JSON.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	b, _ := json.Marshal([]string{"a", "b", "c"})
	fmt.Println(string(b))
}

الطباعة المنسقة

تضيف json.MarshalIndent مسافات بادئة لإخراج سهل القراءة للبشر.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1}
	b, _ := json.MarshalIndent(data, "", "  ")
	fmt.Println(string(b))
}

الأعداد من النوع float64

عند فك التسلسل إلى interface{}، تصبح جميع أعداد JSON من النوع float64 في Go. حوّلوها صراحةً إذا كنتم تحتاجون إلى int.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v interface{}
	json.Unmarshal([]byte("42"), &v)
	fmt.Printf("%T %v\n", v, v)
}

رحلة ذهاب وإياب

يمكنكم إجراء التسلسل ثم فكّه لنسخ البيانات عبر JSON. وتعود القيم سليمة بالنسبة إلى الأنواع المدعومة.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	orig := []int{1, 2, 3}
	b, _ := json.Marshal(orig)
	var back []int
	json.Unmarshal(b, &back)
	fmt.Println(back)
}

تحقق سريع

لماذا يجب تمرير مؤشر إلى json.Unmarshal؟

مراجعة

encoding/json:

  • تحوّل json.Marshal قيم Go إلى JSON
  • تحلل json.Unmarshal JSON إلى مؤشر
  • تعيد الوسوم تسمية المفاتيح؛ وتُفك الأعداد إلى float64 داخل interface{}
  • تحققوا دائمًا من الخطأ المُرجع

الأسئلة الشائعة

هل درس «مراجعة encoding/json» مجاني؟

نعم — نص درس «مراجعة encoding/json» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «مراجعة encoding/json»؟

نفّذ تسلسل JSON وإلغاء تسلسله تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «مراجعة encoding/json»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مراجعة encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob والترميز الثنائي
← العودة إلى Go Academy