تحويل JSON إلى Go struct
مفيدة عند فك استجابة API بمكتبة encoding/json، إذ تكتب لك struct لكل كائن مع الوسوم الصحيحة.
جارٍ تحميل الأداة…
المعالجة والخصوصية: تُحسب النتيجة داخل متصفحك ولا تُرسل بياناتك إلى أي خادم.
طريقة الاستخدام
- أدخل نص JSON واسم النوع الرئيسي.
- تظهر النتيجة فورًا وتتحدّث مع كل تعديل.
- انسخ النتيجة، أو انسخ رابطًا يحفظ القيم نفسها لمشاركتها.
طريقة الحساب
string وint64 وfloat64 وbool للقيم، و[]T للمصفوفات، وstruct مستقلة لكل كائن متداخل. الحقول بصيغة PascalCase مع اختصارات Go المعروفة مثل ID وURL، ولكل حقل وسم json بالمفتاح الأصلي. القيمة null تجعل الحقل مؤشرا *T، والمفتاح الغائب في بعض العناصر يأخذ omitempty.
مثال
المدخلات: اسم النوع الرئيسي = Root. النتيجة: الكود الناتج: type Root struct { ID int64 `json:"id"` Name string `json:"name"` Email string `json:"email"` IsActive bool `json:"is_active"` Balance float64 `json:"balance"` Tags []string `json:"tags"` Address Address `json:"address"` Orders []Order `json:"orders"` } type Address struct { City string `json:"city"` PostalCode string `json:"postal_code"` } type Order struct { OrderID string `json:"order_id"` Total float64 `json:"total"` Coupon *string `json:"coupon"` }، عدد الأنواع: 3، عدد الحقول: 13.
{
"id": 1024,
"name": "Sara Ahmed",
"email": "sara@example.com",
"is_active": true,
"balance": 1520.75,
"tags": ["vip", "riyadh"],
"address": { "city": "Riyadh", "postal_code": "12211" },
"orders": [
{ "order_id": "A-1", "total": 99.5, "coupon": "EID10" },
{ "order_id": "A-2", "total": 120, "coupon": null }
]
}type Root struct {
ID int64 `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
IsActive bool `json:"is_active"`
Balance float64 `json:"balance"`
Tags []string `json:"tags"`
Address Address `json:"address"`
Orders []Order `json:"orders"`
}
type Address struct {
City string `json:"city"`
PostalCode string `json:"postal_code"`
}
type Order struct {
OrderID string `json:"order_id"`
Total float64 `json:"total"`
Coupon *string `json:"coupon"`
}الحدود والملاحظات
- المفتاح الذي يحمل أنواعا مختلفة يصبح any، وهذا يحتاج Go 1.18 أو أحدث.
- كل الأعداد الصحيحة تصبح int64 حتى لو كانت صغيرة.
أسئلة شائعة عن هذه الأداة
لماذا يظهر بعض الحقول بنوع *string أو *int64؟
المؤشر يسمح بالتمييز بين القيمة null أو الغائبة وبين القيمة الصفرية مثل "" أو 0.
لماذا كتب الحقل ID وليس Id؟
هذا عرف أسماء Go، فالاختصارات مثل ID وURL وAPI تكتب بأحرف كبيرة كاملة.
ماذا يفعل omitempty؟
يحذف الحقل من JSON الناتج عند التحويل العكسي إذا كانت قيمته فارغة، ويضاف للمفاتيح التي لم تظهر في كل العناصر.
