JSON إلى بنية Go
الصق عينة JSON واحصل على تعريفات بنية Go تحلّلها بنظافة عبر encoding/json. تكون الحقول مصدَّرة (CamelCase)، وموسومة بمفاتيح JSON الأصلية، ومرفوعة إلى مؤشرات حين قد تكون القيمة null، وتنال الكائنات المتداخلة تعريفات بنية مسمّاة خاصة بها.
كيف تحوّل JSON إلى بنية Go
-
1
الصق JSON
عينة واحدة تكفي. العينات المتعددة تحسّن استنتاج القيم القابلة لـ null.
-
2
اختر التسمية
PascalCase للحقول المصدَّرة هو عرف Go. اختر نمط الاختصار (`URL` مقابل `Url`، `ID` مقابل `Id`).
-
3
اختر استراتيجية الاختياري
استخدم مؤشرات للحقول القابلة لـ null (الأكثر اصطلاحا)، أو وسوم `omitempty`.
-
4
انسخ البنى
بنية جذر واحدة إضافة إلى المتداخلة. الصقها في ملف `.go` واضغط `go build`.
مثال على الناتج
لـ:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
الناتج:
type User struct {
FirstName string `json:"first_name"`
Age int `json:"age"`
Email *string `json:"email"`
Tags []string `json:"tags"`
}
تعيين الأنواع
| قيمة JSON | نوع Go |
|---|---|
| سلسلة نصية | string |
| عدد صحيح | int أو int64 |
| عدد (عشري) | float64 |
| قيمة منطقية | bool |
| null (مع شقيق غير null) | *T (مؤشر) |
| مصفوفة | []T |
| كائن | بنية مسمّاة |
| مصفوفة مختلطة | []interface{} |
اصطلاحات التسمية التي يتبعها المولّد
- الأحرف الأولية بأحرف كبيرة:
id->ID،url->URL،api_key->APIKey. يطابق هذا أسلوب Go الموصى به (وقواعدgo vet/staticcheck). - JSON بنمط snake_case -> حقول PascalCase:
first_name->FirstName. - اختصارات الكلمة الواحدة محفوظة: يبقى
IPهوIP، ويبقىHTTPهوHTTP. - وسم JSON: يحفظ
json:"first_name"المفتاح الأصلي كي يدور الترميز ذهابا وإيابا بنظافة.
الحقول الاختيارية: مؤشر أم omitempty؟
| الاستراتيجية | استخدمها حين |
|---|---|
مؤشر (*T) |
تحتاج التمييز بين “غائب” و“قيمة صفرية“ |
omitempty |
تريد فقط تخطّي القيم الصفرية عند الترميز؛ يخزّن فك الترميز صفرا للمفقود |
| لا هذا ولا ذاك | الحقل حاضر دائما والقيم الصفرية ذات معنى |
يفترض المولّد مؤشر + omitempty لأي شيء يُرى null؛ اضبط بحسب دلالاتك.
أخطاء شائعة
- استخدام
intحيث يتجاوز عدد JSON الصحيحMaxInt32على هدف 32 بت. استخدمint64للقيم المعلومة الكبر. - إعادة الترميز وفقدان ترتيب المفاتيح. يصدر
encoding/jsonالمفاتيح بترتيب تصريح الحقول، لا بترتيب JSON الأصلي. رتّب يدويا إن احتجت ناتجا قانونيا. - المصفوفات مختلطة الشكل. يفقد
[]interface{}أمان النوع. فكّر في أنواع اتحاد بحقل مميِّزtypeبدلا من ذلك. - نسيان
omitemptyعلى الاختياريات. بدونه، تُسلسَل الحقول الاختيارية كـ"foo": nullبدل حذفها.
الأسئلة الشائعة
استخدم المؤشرات حين تحتاج التمييز بين “الحقل غائب” و“الحقل صفري“. استخدم omitempty حين لا تكون القيمة الصفرية قيمة عمل مشروعة (""، 0، false تعني دائما “تخطَّ هذا”). تختار فرق كثيرة واحدة وتطبّقها باتساق عبر قاعدة الشيفرة.
يصبح كل كائن متداخل تعريف بنية مسمّاة منفصلا (مثل User -> Address). تُضمَّن الأنواع فقط حين تكون البنية المتداخلة صغيرة جدا وتُستخدم مرة؛ وإلا تحصل على أنواع نظيفة قابلة لإعادة الاستخدام.
نعم. يصبح id هو ID، وurl هو URL، وapi_key هو APIKey. هذا ما يتوقعه go vet وما توصي به معظم أدلة أسلوب Go.
يصدر المولّد بنى عادية بوسوم json: قياسية. أما تطبيقات UnmarshalJSON المخصصة (مثلا لتواريخ بصيغ غير ISO)، فأضِفها يدويا بعد التوليد.
أدوات ذات صلة
مرجع جدول ASCII
جدول ASCII كامل من 0 إلى 127 مع التمثيل العشري والست عشري والثماني والثنائي والمرجع الرقمي في HTML لكل محرف، بما في ذلك أكواد التحكم مثل NUL وLF وDEL.
مرجع أحرف HTML
قائمة قابلة للبحث بكيانات HTML، مع رموزها المسمّاة والرقمية، بالإضافة إلى خيار النسخ بنقرة واحدة للأحرف والرموز الخاصة.
مرجع اختصارات لوحة المفاتيح
ابحث في الاختصارات الافتراضية الموثقة لـ VS Code وChrome وBash مع GNU Readline على macOS وWindows وLinux.
مدقق البريد الإلكتروني
تحقق من عنوان بريد إلكتروني: فحص صياغة RFC 5322، واستعلام حي عن سجل MX، بالإضافة إلى تفاصيل الجزء المحلي والنطاق والطول. لا يتم إرسال أي بريد.
مولد EditorConfig
أنشئ ملف .editorconfig بقواعد نمط المسافة البادئة وحجمها ونهاية السطر ومجموعة الأحرف والمسافات البيضاء، لتنسيق موحّد عبر بيئات التطوير المتكاملة (IDEs) والمحررات.
منسق HTML
نسّق HTML محلياً في المتصفح بمسافة بادئة من مسافتين أو أربع مسافات. لا يُرفع HTML ولا يُتحقق منه.
الأداة متاحة بلغات أخرى
- JSON vers Go Struct [FR]
- JSON till Go-struktur [SV]
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON ke Struktur Go [ID]
- JSON thành cấu trúc [VI]
- JSON을 Go 구조체로 변환 [KO]
- JSON zu Go Struct [DE]
- JSON a Estructura Go [ES]
- JSON naar Go-structuur [NL]
- JSON na strukturę Go [PL]
- JSON→Go構造体 [JA]
- JSON para Estrutura Go [PT]
- JSON в структуру данных [RU]
- JSON'dan Go Yapısına [TR]
- JSON 至Go结构 [ZH]
- JSON to Go Struct [EN]
- JSON in Struttura Go [IT]