انتقل إلى المحتوى

تحويل JSON إلى أصناف Java

يُنشئ أصناف Java من JSON: تشغّل الصفحة json_typegen (WebAssembly) في وضع Kotlin وتعيد كتابة كل data class كصنف Java بحقول خاصة ومُنشئ يأخذ جميع الوسائط ودوال getter وsetter.

إنشاء POJO لإلغاء تسلسل استجابة REST باستخدام Jackson.

JSON

متى تستخدمها

  • إنشاء POJO لإلغاء تسلسل استجابة REST باستخدام Jackson.
  • رسم مسودة أصناف DTO لمتحكّم Spring من حمولة مثال.

طريقة الاستخدام

  1. الصق كائن JSON أو مصفوفة في المحرر الأيسر.
  2. اقرأ الأصناف: الصنف الجذري اسمه Root، وتصبح الكائنات المتداخلة أصنافًا مستقلة مسمّاة باسم مفتاحها.
  3. انسخها إلى ملفات .java منفصلة (استيرادات List وJackson مضمّنة) وعدّل الأنواع عند الحاجة.

JSON

{
  "id": 42,
  "user_name": "ada",
  "active": true,
  "tags": ["admin", "editor"]
}

أصناف Java

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Root {
	private Long id;
	@JsonProperty("user_name")
	private String userName;
	private Boolean active;
	private List<String> tags;

	public Root(Long id, String userName, Boolean active, List<String> tags) {
		this.id = id;
		this.userName = userName;
		this.active = active;
		this.tags = tags;
	}

	public Long getId() {
		return this.id;
	}

…

التفاصيل والقيود

يجري الإنشاء في المتصفح باستخدام WebAssembly؛ لا توجد إعدادات.

تصبح مفاتيح snake_case حقولًا بصيغة camelCase مع @JsonProperty من Jackson؛ ويُستورد Jackson وjava.util.List عند استخدامهما.

تُطابَق الأرقام مع Long أو Double، والقيم المنطقية مع Boolean؛ وتستخدم دوال getter المنطقية get وليس is.

تُحدَّد القيمة null بالنوع Object، ومصفوفة القيم null بالنوع List<?>. استبدلها بأنواع محددة عندما تعرف البيانات الحقيقية.

FAQ

هل يمكنني تحويل مصفوفة JSON في المستوى الجذري؟

نعم. يصبح الجذر صنفًا مغلِّفًا Root بحقل List<Root2>، وتصبح عناصر المصفوفة الصنف Root2.

هل تُعالَج الحقول الاختيارية؟

تُكتشف المفاتيح المفقودة من بعض عناصر المصفوفة، لكن مخرجات Java تُسقط علامة الاختيارية، فيكون كل حقل نوعًا مغلِّفًا عاديًا يقبل null.

هل يُنشئ توصيفات (annotations) من Lombok أو records؟

لا. يكتب أصنافًا عادية بمُنشئات صريحة ودوال getter وsetter.

كيف تُحدَّد أنواع قيم null؟

الحقل الذي قيمته null في العينة يصبح Object (private Object note;)، لأنه لا يمكن استنتاج نوع محدد. قدّم عينة بقيمة حقيقية للحصول على String أو Long أو صنف متداخل.

المواصفات والمراجع