JSON إلى فئة Java
الصق عيّنة JSON، وسيولّد المولّد فئة Java واحدة أو أكثر بأنواع الحقول الصحيحة، ودوال getter وsetter، وتعليقات مكتبة JSON. يدعم Jackson (@JsonProperty) وGson (@SerializedName) وLombok (@Data/@Builder) للحصول على كود أنظف. وتتحول الكائنات المتداخلة إلى فئات داخلية أو فئات شقيقة، بحسب التخطيط الذي تختاره.
كيفية تحويل JSON إلى Java
-
1
الصق JSON
تكفي عيّنة واحدة؛ واستخدام عدة عيّنات يحسّن تحديد ما إذا كان الحقل يقبل قيمة null.
-
2
اختر المكتبة
Jackson (الأكثر شيوعًا في Spring)، أو Gson (لأندرويد وبعض المشاريع القديمة)، أو POJO بسيط بدون تعليقات.
-
3
اختر الإضافات
Lombok لتوليد دوال getter/setter تلقائيًا، ونمط builder، وequals/hashCode. أو اتركه بسيطًا دون إضافات.
-
4
اختر نمط التداخل
فئات شقيقة في الملف نفسه (يجب أن تكون فئات public في Java 17 فما فوق في ملفات منفصلة)، أو فئات ثابتة متداخلة.
-
5
انسخ الكود
أدرِجه مباشرةً في مشروعك. تتطابق أسماء الفئات مع مفاتيح JSON، وتُضبط الحزمة وفق ما تعدّه.
مثال على المخرجات: Jackson + Lombok
المدخل:
{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }
المخرج:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty("firstName")
private String firstName;
@JsonProperty("age")
private int age;
@JsonProperty("address")
private Address address;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {
@JsonProperty("city")
private String city;
}
مطابقة الأنواع
| JSON | نوع Java |
|---|---|
| سلسلة نصية | String |
| عدد صحيح (≤ Integer.MAX) | Integer / int |
| عدد صحيح كبير | Long / BigInteger |
| عدد عشري | Double / BigDecimal |
| قيمة منطقية | Boolean / boolean |
| تاريخ ISO | LocalDate (Jackson JSR-310) |
| تاريخ ووقت ISO | Instant / OffsetDateTime |
| null (مع حقل شقيق غير فارغ) | نوع مُغلِّف (مثل Integer) |
| مصفوفة | List<T> |
| كائن | فئة متداخلة |
الاختيار بين النوع المُغلَّف والنوع الأولي
- النوع الأولي (
int،long،boolean)، لا يقبل null، وفعّال، ودون تغليف تلقائي (auto-boxing). - النوع المُغلَّف (
Integer،Long،Boolean)، يقبل null، ومطلوب إذا كان الحقل قد يغيب أو يكون null في JSON.
يستخدم المولّد افتراضيًا النوع المُغلَّف لكل ما يُعدّ قابلًا لقيمة null، والنوع الأولي فيما عدا ذلك.
Jackson مقابل Gson
| الميزة | Jackson | Gson |
|---|---|---|
| الانتشار في Spring | نعم، افتراضي | لا (يتطلب إعدادًا) |
| الأداء | أسرع | أبطأ |
| دعم تواريخ JSR-310 | عبر وحدة إضافية | عبر وحدة إضافية |
| تعدد الأشكال | @JsonTypeInfo |
RuntimeTypeAdapter |
| التسامح مع الفاصلة الأخيرة | لا (افتراضيًا) | نعم |
الأخطاء الشائعة
- استخدام الأنواع الأولية لحقول تقبل null. لا يمكن أن يكون
intفارغًا (null)؛ وسيُطلق Jackson خطأً إذا احتوى JSON على"age": null. استخدمInteger. - غياب وحدات التاريخ. يحتاج Jackson إلى
jackson-datatype-jsr310لـInstant/LocalDate. وبدونها، تعود التواريخ إلىStringأو إلى قيم long بتوقيت الحقبة (epoch). - مشاركة الأنواع المُغلَّفة بين فئات غير مترابطة. إذا احتوى شكلان من JSON على
Addressمتداخل، فسينشئ المولّد فئتَيAddress. أعِد التسمية أو وحِّدهما يدويًا. - نسيان
@JsonIgnoreProperties(ignoreUnknown = true). يُطلق Jackson الصارم خطأً عند الخصائص غير المعروفة؛ أضِف هذا التعليق (أو اضبطه عالميًا) لإلغاء تسلسل متسامح.
الأسئلة الشائعة
Jackson في معظم الحالات، فهو الخيار الافتراضي في Spring، وأسرع، ويدعم تعدد الأشكال بشكل أوفى. أما Gson فأخف وأشهر في أندرويد، رغم أن مشاريع أندرويد باتت تعتمد بشكل متزايد على Moshi أو kotlinx.serialization.
يقلّص Lombok كثيرًا من الكود المكرر (getters وsetters وequals وhashCode وbuilder). يُستخدم على نطاق واسع، لكنه يتطلب معالج تعليقات Lombok في عملية البناء. عطّله إذا كان مشروعك يتجنب Lombok لأسباب تتعلق بنظافة الاعتماديات.
الحقول التي تكون null في أي عيّنة مرصودة تصبح أنواعًا مُغلَّفة (Integer بدلًا من int) كي تستطيع الاحتفاظ بقيمة null. عندئذٍ يُلغي Jackson تسلسل "age": null دون خطأ. أضِف @JsonInclude(Include.NON_NULL) لتخطي القيم null أثناء التسلسل.
نعم، إذا اخترت “record”. فئات record موجزة وغير قابلة للتغيير وتعمل مع Jackson 2.12+. وبالنسبة لمشاريع Spring Boot 3، فإن الجمع بين record والتوليد بدون Lombok هو الخيار الحديث.
أدوات ذات صلة
مرجع جدول 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 ke Kelas Java [ID]
- JSON sang lớp Java [VI]
- JSON a Clase Java [ES]
- JSON vers classe Java [FR]
- JSON을 Java 클래스로 [KO]
- JSON naar Java-klasse [NL]
- JSON till Java-klass [SV]
- JSON から Java クラスへ [JA]
- JSON เป็นคลาส Java [TH]
- JSON zu Java-Klasse [DE]
- JSON na klasę Java [PL]
- JSON para Classe Java [PT]
- JSON in classe Java [IT]
- JSON в класс Java [RU]
- JSON'dan Java Sınıfına [TR]
- JSON 转 Java 类 [ZH]
- JSON to Java Class [EN]