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)، فأضِفها يدويا بعد التوليد.
أدوات ذات صلة
مولّد إعدادات Webpack
أنشئ ملف webpack.config.js لـ webpack 5 لمشاريع JavaScript الخالصة أو React أو Vue: مع TypeScript وBabel وCSS أو Sass والصور وHtmlWebpackPlugin وخادم التطوير وسطر npm install.
محوّل ترميز ملفات النصوص
حوّل النص بين UTF-8 وUTF-16 وLatin-1 وWindows-1252 وترميزات أخرى لإصلاح الأحرف المشوّهة.
مُحقق تنسيق XSD
قم بالتحقق من وثيقة XML وفقًا لمخطط XSD، وعرض أي اختلافات بين العناصر وأنواعها مع تحديد أرقام السطور بدقة.
مولّد ملف .gitignore
اجمع قواعد استبعاد المشروع لـ Laravel وNode.js وPython وRails. انسخ الناتج أو نزّل ملف ZIP يحتوي على .gitignore، مع إبقاء القواعد الشخصية منفصلة.
مرجع جدول ASCII
جدول ASCII كامل من 0 إلى 127 مع التمثيل العشري والست عشري والثماني والثنائي والمرجع الرقمي في HTML لكل محرف، بما في ذلك أكواد التحكم مثل NUL وLF وDEL.
أداة إزالة التشفير في لغة جافا سكريبت (JavaScript Deobfuscator)
إزالة التشفير من كود جافا سكريبت مُصغَّر أو مُعبَّأ باستخدام إعادة تسمية المتغيرات، وفك ترميز السلاسل النصية ومصفوفات البيانات، بالإضافة إلى عكس تسطيح تدفق التحكم وتحسين هيكله.
الأداة متاحة بلغات أخرى
- JSON vers Go Struct [FR]
- JSON ke Struktur Go [ID]
- JSON→Go構造体 [JA]
- JSON na strukturę Go [PL]
- JSON para Estrutura Go [PT]
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON thành cấu trúc [VI]
- JSON naar Go-structuur [NL]
- JSON zu Go Struct [DE]
- JSON till Go-struktur [SV]
- JSON a Estructura Go [ES]
- JSON을 Go 구조체로 변환 [KO]
- JSON 至Go结构 [ZH]
- JSON to Go Struct [EN]
- JSON in Struttura Go [IT]
- JSON'dan Go Yapısına [TR]
- JSON в структуру данных [RU]