JSON إلى Go Struct
حوّل JSON إلى هياكل Go بأسماء حقول مصدَّرة ووسوم json وأنواع مؤشرات لقيم null وomitempty اختياري. يعالج الكائنات والمصفوفات المتداخلة. مجاني.
الكائنات المتداخلة تصبح structs مستقلة؛ والقيم القابلة لأن تكون null تستخدم المؤشرات؛ والأعداد الصحيحة تصبح int64 والعشرية float64 والقيم المختلطة أو null فقط any.
يعمل بالكامل في متصفحك. لا يتم رفع بياناتك أبدًا.
أدوات ذات صلة
عرض الكلما هو JSON إلى Go Struct؟
ولّد تعريفات struct في Go بأسلوب اللغة المتعارف عليه من عيّنة JSON. تكون أسماء الحقول مصدَّرة بنمط PascalCase مع المختصرات المتعارف عليها في Go (ID وURL وAPI…)، ويحمل كل حقل وسم json:"…" بالمفتاح الأصلي، وتتحول الكائنات المتداخلة إلى هياكل مسماة منفصلة.
كيفية استخدام JSON إلى Go Struct
- الصق عيّنة JSON في إدخال JSON (أو انقر تحميل مثال / فتح ملف).
- اضبط اسم النوع الجذر (الافتراضي
Root). - أبقِ إضافة omitempty للحقول الاختيارية والقابلة لأن تكون null أو ألغِها.
- انسخ شيفرة Go الناتجة أو تنزيل كملف.
مثال
{"id":1,"name":"A","tags":["x"]} type Root struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
} متى تستخدم JSON إلى Go Struct
استخدمه لفك استجابات API بواسطة encoding/json. لا يولّد أنواعًا مخصصة لقيم الوقت أو التعدادات؛ غيّر string إلى time.Time بنفسك حيث يناسب.
كيف يعمل JSON إلى Go Struct
تُجتاز العيّنة تكراريًا ويجمع كل موضع الأنواع التي رآها. تُدمج مصفوفات الكائنات في نوع واحد: فالمفتاح الغائب من بعض العناصر يصبح اختياريًا، والمفتاح الذي يكون null في موضع ما يصبح قابلًا لـ null، والأعداد الصحيحة المختلطة بكسرية تصبح نوع الفاصلة العائمة، وأي خلط آخر للأنواع يعود إلى نوع ديناميكي. وتصبح الكائنات المتداخلة أنواعًا مسماة (PascalCase للمفتاح مع إفراد مفاتيح المصفوفات: orders ← Order) مع لواحق رقمية عند تعارض الأسماء. يستخدم ناتج Go النوع int64 للأعداد الصحيحة وfloat64 للكسرية وstring وbool وشرائح (slices) للمصفوفات ومؤشرًا (*T) للقيم القابلة لـ null وany للقيم الديناميكية أو التي هي null فقط. وتُحاذى الأعمدة كما في ناتج gofmt.
حالات الاستخدام الشائعة
- نمذجة استجابة REST للاستخدام مع json.Unmarshal
- إنشاء هياكل إعداد من ملف JSON
- تسريع كتابة كائنات نقل البيانات (DTO) لخدمة Go مصغّرة
- مقارنة تسمية الحقول بين JSON وشيفرة Go
الأسئلة الشائعة
لماذا int64 بدل int؟
حجم int64 مضمون على كل منصة، مما يتجنب مفاجآت الفيض مع المعرّفات الكبيرة. غيّره إلى int إن فضّلت.
متى يُستخدم المؤشر؟
عندما تحتوي العيّنة على null لمفتاح ما يصبح الحقل *T ليمكن تمييز القيمة الغائبة عن القيمة الصفرية.
ماذا يفعل omitempty؟
يتخطى encoding/json الحقل عند التسلسل إذا كان بقيمته الصفرية. ويضيفه الخيار فقط للحقول الاختيارية أو القابلة لـ null في العيّنة.