العمل مع JSON في Go: التحليل والتسلسل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في العمل مع JSON في Go



JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات يُستخدم على نطاق واسع في تطوير الويب وواجهات برمجة التطبيقات (API) وملفات التكوين. توفر لغة Go (Golang) حزمة مدمجة encoding/json تتيح إجراء تحليل (فك الترميز) وتسلسل (ترميز) البيانات بسهولة. في هذه المقالة، سنشرح أساسيات العمل مع JSON في Go من خلال أمثلة عملية مفهومة حتى للمطورين المبتدئين.



أساسيات حزمة encoding/json



حزمة encoding/json هي مكتبة Go قياسية لا تتطلب تثبيتًا إضافيًا. الأداتان الرئيسيتان في هذه الحزمة هما الدالتان json.Marshal (للتسلسل) و json.Unmarshal (لإلغاء التسلسل).



الهياكل ووسوم JSON



في Go، يتم تمثيل البيانات عادةً على شكل هياكل (struct). للتحكم في أسماء الحقول في JSON، تُستخدم الوسوم. لنلقِ نظرة على مثال بسيط:



package main

import ( "encoding/json" "fmt")

// تعريف هيكل مع وسوم JSONtype Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` IsAdmin bool `json:"is_admin"`}

func main() { // إنشاء مثيل للهيكل person := Person{ Name: "إيفان بيتروف", Age: 30, Email: "ivan@example.com", IsAdmin: true, } // تسلسل إلى JSON jsonData, _ := json.Marshal(person) fmt.Println(string(jsonData))}


نتيجة التنفيذ:



{"name":"إيفان بيتروف","age":30,"email":"ivan@example.com","is_admin":true}


نقاط مهمة:

  • الوسم json:"name" يحدد كيف سيُسمى الحقل في JSON
  • الخيار omitempty يتخطى الحقول الفارغة (القيم الصفرية)
  • يجب أن تكون حقول الهيكل قابلة للتصدير (تبدأ بحرف كبير)


تسلسل (Marshal) البيانات إلى JSON



التسلسل هو عملية تحويل هيكل Go أو أي نوع بيانات آخر إلى سلسلة JSON. الدالة json.Marshal تُرجع شريحة من البايتات ([]byte) ورسالة خطأ.



أمثلة على تسلسل أنواع مختلفة



package main

import ( "encoding/json" "fmt")

type Product struct { ID int `json:"id"` Name string `json:"name"` Price float64 `json:"price"` Tags []string `json:"tags,omitempty"` InStock bool `json:"in_stock"`}

func main() { // تسلسل هيكل product := Product{ ID: 101, Name: "لابتوب", Price: 79999.99, Tags: []string{"إلكترونيات", "لابتوبات"}, InStock: true, } // إخراج جميل مع مسافات بادئة jsonData, _ := json.MarshalIndent(product, "", " ") fmt.Println(string(jsonData)) // تسلسل شريحة من الهياكل products := []Product{ {ID: 1, Name: "فأرة", Price: 1500.00, InStock: true}, {ID: 2, Name: "لوحة مفاتيح", Price: 3500.00, InStock: false}, } jsonArray, _ := json.Marshal(products) fmt.Println(string(jsonArray))}


النتيجة:



{  "id": 101,  "name": "لابتوب",  "price": 79999.99,  "tags": [    "إلكترونيات",    "لابتوبات"  ],  "in_stock": true}[{"id":1,"name":"فأرة","price":1500,"in_stock":true},{"id":2,"name":"لوحة مفاتيح","price":3500,"in_stock":false}]


تحليل (Unmarshal) JSON في Go



التحليل هو العملية العكسية: تحويل سلسلة JSON إلى هيكل Go. لهذا تُستخدم الدالة json.Unmarshal.



مثال أساسي على التحليل



package main

import ( "encoding/json" "fmt" "log")

type User struct { Username string `json:"username"` Age

المدونات

توصيات الكتب