مراجعة 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.UnmarshalJSON إلى مؤشر - تعيد الوسوم تسمية المفاتيح؛ وتُفك الأعداد إلى 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مراجعة encoding/json
- encoding/xml
- encoding/csv
- gob والترميز الثنائي