تُسهّل حزمة Go القوية encoding/json
تحويل هياكل Go إلى JSON، وهو جانب بالغ الأهمية في تسلسل البيانات، وتفاعلات واجهات برمجة التطبيقات، وإدارة ملفات التكوين. يستكشف هذا الدليل تقنيات فعّالة للتعامل مع مختلف السيناريوهات، بما في ذلك الهياكل الأساسية، والهياكل المتداخلة، وتنسيق JSON المُخصص.
جدول المحتويات
- تحويل الهيكل الأساسي إلى JSON
- معالجة الهياكل المتداخلة
- التحكم في تنسيق إخراج JSON
- معالجة الأخطاء القوية
تحويل الهيكل الأساسي إلى JSON
يُعد تحويل هيكل Go بسيط إلى JSON أمرًا مباشرًا باستخدام دالة json.Marshal()
. دعونا نوضح ذلك بمثال أساسي:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
person := Person{Name: "John Doe", Age: 30}
jsonData, err := json.Marshal(person)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(jsonData))
}
تقوم العلامات json:"name"
و json:"age"
بتعيين حقول الهيكل إلى مفاتيح JSON. تُعيد json.Marshal()
شريحة بايت، نقوم بتحويلها إلى سلسلة. من الأهمية بمكان دائمًا التحقق من وجود أخطاء.
معالجة الهياكل المتداخلة
يمتد أناقة json.Marshal()
إلى الهياكل المتداخلة. ضع في اعتبارك هذا المثال:
package main
import (
"encoding/json"
"fmt"
)
type Address struct {
Street string `json:"street"`
City string `json:"city"`
}
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Address Address `json:"address"`
}
func main() {
address := Address{Street: "123 Main St", City: "Anytown"}
person := Person{Name: "Jane Doe", Age: 25, Address: address}
jsonData, err := json.Marshal(person)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(jsonData))
}
تتعامل json.Marshal()
بشكل متكرر مع الهياكل المتداخلة، مما يُنشئ التسلسل الهرمي المناسب لـ JSON.
التحكم في تنسيق إخراج JSON
للحصول على قابلية قراءة محسّنة، خاصةً مع الهياكل المعقدة، استخدم json.MarshalIndent()
:
package main
import (
"encoding/json"
"fmt"
)
// ... (Person and Address structs from previous examples) ...
func main() {
// ... (person variable from previous examples) ...
jsonData, err := json.MarshalIndent(person, "", " ")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(jsonData))
}
الحجة الثانية هي سلسلة المسافة البادئة (هنا، مسافتان). ينتج هذا إخراج JSON مُنسق بشكل مرتب.
معالجة الأخطاء القوية
ادمج دائمًا معالجة شاملة للأخطاء. تُوضح الأمثلة أعلاه نهجًا أساسيًا؛ في التعليمات البرمجية الإنتاجية، ضع في اعتبارك إدارة أخطاء أكثر تطوراً، والتي قد تتضمن تسجيل الدخول وأنواع أخطاء مخصصة.
يُزوّدك هذا الدليل الشامل بالمعرفة اللازمة لتحويل هياكل Go إلى JSON بكفاءة، مع إدارة مختلف التعقيدات بأناقة ودقة. تذكر أن معالجة الأخطاء المناسبة هي أمر بالغ الأهمية للتطبيقات القوية.