ما الذي تفعله الأداة
يقرأ محوّل JSON إلى Go مثال JSON ويكتب تعريفات بنى Go مع وسوم json جاهزة لـ encoding/json. الصق استجابة الواجهة البرمجية التي تستدعيها واحصل على أنواع يمكنك استخدامها مع json.Unmarshal فورًا، دون كتابة كل حقل ووسم يدويًا.
يفحص المحوّل كل قيمة في المثال. تصبح الكائنات المتداخلة بنى مستقلة، وتُدمج كل عناصر المصفوفة في نوع عنصر واحد، وتُكتشف الحقول الغائبة عن بعض العناصر أو التي تكون null أحيانًا على أنها اختيارية. ويُنسَّق الناتج كما يفعل gofmt.
طريقة الاستخدام
- الصق JSON في حقل الإدخال، أو ارفع ملف
.json، أو انقر مثال. - حدّد اسم النوع الجذري واختر طريقة كتابة الكائنات المتداخلة، والحقول التي تحصل على
omitempty، وهل تستخدم الحقول القابلة لـ null مؤشرات. - انسخ شيفرة Go أو نزّلها كملف
.goثم أضف سطرpackageالخاص بك.
يُبلَّغ عن JSON غير الصالح مع السطر والعمود اللذين فيهما المشكلة.
مثال
هذا الـ JSON:
{ "id": 7, "user_name": "ada", "tags": ["admin"], "profile": { "avatar_url": "https://example.com/a.png" } }
يصبح هذه البنى:
type Root struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Tags []string `json:"tags"`
Profile Profile `json:"profile"`
}
type Profile struct {
AvatarURL string `json:"avatar_url"`
}
نصائح
- يُظهر المثال الواحد ما يحتويه فقط. إذا كانت القيمة قد تكون رقمًا أو نصًا فضمّن الحالتين، أو ضع عدة أمثلة في مصفوفة لتُدمج.
- تصل الطوابع الزمنية كنصوص. غيّر النوع بنفسك إلى
time.Timeعندما تكون الصيغة RFC 3339. - تتشارك الكائنات ذات الحقول المتطابقة تمامًا بنية واحدة، فيبقى الناتج قصيرًا عندما يتكرر الشكل نفسه في عدة أماكن.
- تكتب TypeScript أيضًا؟ يستخدم مولّد JSON إلى TypeScript الاستنتاج نفسه لإنشاء الواجهات.
الأسئلة الشائعة
› كيف تُختار أسماء الحقول؟
يتحول كل مفتاح JSON إلى اسم Go مُصدَّر بصيغة PascalCase، وتُكتب الاختصارات الشائعة بأحرف كبيرة كما يتوقع golint، فيصبح user_id هو UserID ويصبح avatar_url هو AvatarURL. ويبقى المفتاح الأصلي في وسم json، فيطابق encoding/json الحقول بدقة.
› ما أنواع Go المستخدمة؟
تصبح النصوص string والأعداد الصحيحة int (أو int64 إذا لم تتسع قيمة في 32 بت) والأعداد العشرية float64 والقيم المنطقية bool. وتصبح المصفوفات slices والكائنات الفارغة map[string]any، أما القيم التي تكون null فقط أو تخلط عدة أنواع فتصبح any.
› ما الفرق بين البنى المسمّاة والمضمّنة؟
يكتب الوضع المسمّى كل كائن متداخل كنوع مستقل، مثل Address أو Order، ما يسهّل إعادة استخدامه واختباره. أما الوضع المضمّن فيضع أنواع struct مجهولة الاسم داخل البنية الأم مباشرة ويُبقي كل شيء في تصريح واحد، كما تفعل كثير من المحوّلات السريعة.
› متى يُضاف omitempty؟
افتراضيًا إلى الحقول الاختيارية فقط، أي الحقول الغائبة عن بعض كائنات المصفوفة أو التي تكون null أحيانًا. ويمكنك أيضًا إضافته إلى كل الحقول أو عدم إضافته إطلاقًا. فعّل المؤشرات للتمييز بين القيمة الغائبة أو null والقيمة الصفرية.
› هل يُرفع JSON الخاص بي؟
لا. تُنشأ البنى في متصفحك ولا يُرسل أي شيء إلى خادم.