تحويل JSON إلى بنى Go
يُنشئ تعريفات struct في Go من JSON باستخدام منفذ لـ json-to-go، منسّقة بـ gofmt. تصبح المفاتيح حقولًا مُصدَّرة بصيغة CamelCase مع وسوم json:"..."؛ وتصبح الكائنات المتداخلة structs مجهولة مضمّنة، وتصبح null هي any.
كتابة struct لتمرير استجابة REST API من طرف ثالث إلى json.Unmarshal.
متى تستخدمها
- كتابة struct لتمرير استجابة REST API من طرف ثالث إلى json.Unmarshal.
- تهيئة أنواع الطلب والاستجابة لمعالج HTTP في Go من حمولات أمثلة.
طريقة الاستخدام
- الصق كائن JSON أو مصفوفة في المحرر الأيسر.
- اقرأ الـ struct المُنشأ؛ اسم النوع الجذري دائمًا AutoGenerated.
- انسخه إلى الحزمة، وأعد تسمية النوع، واستخرج الـ structs المضمّنة إلى أنواع مسمّاة إذا كنت تعيد استخدامها.
JSON
{
"id": 42,
"user_name": "ada",
"score": 9.5,
"active": true,
"deleted_at": null,
"tags": ["go", "json"],
"address": { "city": "Tokyo", "zip": "100-0001" }
}Go struct
type AutoGenerated struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Score float64 `json:"score"`
Active bool `json:"active"`
DeletedAt any `json:"deleted_at"`
Tags []string `json:"tags"`
Address struct {
City string `json:"city"`
Zip string `json:"zip"`
} `json:"address"`
}التفاصيل والقيود
يجري الإنشاء في المتصفح. لا توجد إعدادات لاسم النوع أو للاختيار بين structs مضمّنة ومسمّاة أو للوسوم.
تُكتب الاختصارات بأحرف كبيرة (يصبح id هو ID) ويتحول snake_case إلى CamelCase، مع الاحتفاظ بالمفتاح الأصلي في وسم json.
تصبح الأعداد الصحيحة int (int64 للقيم الكبيرة)، والعشرية float64. تصبح null والمصفوفات الفارغة والمختلطة any أو []any.
عندما تختلف الكائنات في مصفوفة، تحصل المفاتيح المفقودة من بعضها على ,omitempty.
FAQ
هل يمكنني تحويل مصفوفة JSON في المستوى الجذري؟
نعم. ينتج type AutoGenerated []struct{...}، مع دمج حقول جميع الكائنات في المصفوفة.
لماذا نوع الحقل الذي قيمته null هو any؟
القيمة null لا تحمل معلومات عن النوع. استبدل any بمؤشر مثل *string أو *time.Time للإبقاء على دعم nil.
هل يُنشئ structs متداخلة مسمّاة؟
لا. الكائنات المتداخلة structs مجهولة مضمّنة. انقلها يدويًا إلى أنواع مسمّاة إذا كنت تحتاج للإشارة إليها.