جاكسون مقابل جسون: حالات حافة في تحليل JSON لتطبيقات جافا

يعد JSON (JavaScript Object Notation) مجموعة من أزواج المفتاح والقيم التي يمكن تحليلها وإنشاؤها بسهولة من قبل التطبيقات. إنه مجموعة فرعية من معيار لغة برمجة JavaScript ECMA-262. يتطلب تحليل JSON في معظم التطبيقات، مثل واجهات برمجة التطبيقات القائمة على REST أو التطبيقات التي تحتاج إلى تسلسل البيانات.

في بيئة Java، تُعتبر مكتبتي Jackson وGson الأكثر شهرة للتعامل مع بيانات JSON. يتم استخدام كلاهما على نطاق واسع ويقدمان مزايا فريدة. يستخدم هذا المقال أمثلة حدودية لاستكشاف ميزات كلا المكتبتين على معايير مختلفة.

نبذة عن Jackson وGson

Jackson

Jackson تم تطويره بواسطة FasterXML ويستخدم في تطبيقات المؤسسات والأطر البرمجية مثل Spring Boot. يوفر تحليلًا وتسلسلًا وفك تسلسل بيانات JSON. تجعل الميزات التالية هذه المكتبة شهيرة بين المطورين:

  1. Jackson هو مكتبة معالجة JSON الافتراضية في Spring Boot، مما يقضي على التكوين اليدوي في معظم الحالات.
  2. يُيسر فك تسلسل JSON إلى أنواع عامة باستخدام TypeReference أو JavaType.
  3. يوفر تعليقات مختلفة لتخصيص سلوك التسلسل والفك تسلسل. على سبيل المثال، @JsonProperty(name) يجعل الربط بين المفتاح الوارد وحقل Java POJO الفعلي سلسًا.
  4. يوفر دعمًا شاملاً وقويًا للربط ثنائي الاتجاه (JSON إلى POJO والعكس)، وواجهة برمجة تطبيقات التدفق (تقرأ الواجهة برمجية JSON إلى POJO)، وتحليل نموذج الشجرة (خريطة في الذاكرة الداخلية لكائنات JSON).
  5. تقدم مكتبة Jackson أداءً عاليًا بسبب تقليل التكاليف الزائدة للذاكرة وتحسين التسلسل/التفسيل (من JSON إلى POJO والعكس).
  6. تدعم Jackson وحدات إضافية مثل معالجة XML و YAML، وتعزيزات محددة لـ Kotlin و Scala.
  7. تتعامل التعليقات مثل @JsonTypeInfo و @JsonSubTypes مع الأنواع المتعددة.
  8. يتعامل مع الحقول المفقودة أو الإضافية في بيانات JSON بسبب توافقه العكسي والتوافق التام.
  9. توفر Jackson دعمًا للكائنات اللاقابلة للتغيير والفئات ذات البناة، بما في ذلك تلك التي تستخدم أنماط البناء.
  10. فئة ObjectMapper متزامنة مع الخيوط وبالتالي تمكن من استخدام فعال في تطبيقات متعددة الخيوط.

غسون

غسون تم تطويره بواسطة Google ومصمم لتحويل JSON إلى كائنات جافا (POJO) والعكس. إنه بسيط ومثالي للاستخدام في التطبيقات الأصغر التي تحتاج إلى تنفيذات سريعة. توفر المكتبة مفتوحة المصدر الميزات الرئيسية التالية:

  1. غسون لديه تبعيات خارجية دنيا؛ وبالتالي يسهل دمجه.
  2. يدعم الكائنات المتداخلة وأنواع البيانات المعقدة مثل القوائم والخرائط والفئات المخصصة.
  3. يمكنه تحويل JSON إلى مجموعات عامة مثل List<T> و Map<K,V> باستخدام TypeToken.
  4. تتيح واجهات JsonSerializer و JsonDeserializer في مكتبة Gson تنفيذًا مخصصًا.
  5. القيم الفارغة مستبعدة من مخرجات JSON بشكل افتراضي، وإذا لزم الأمر، يمكن تضمين القيم الفارغة في المخرجات.
  6. تقوم التعليقات التوضيحية @SerializedName بربط مفاتيح JSON بالحقول في Java ذات الأسماء المختلفة.
  7. كائنات Gson آمنة للخيوط، وبالتالي يمكن استخدامها في التطبيقات متعددة الخيوط.
  8. يمكن لفئة GsonBuilder تطبيق سياسات تسمية مخصصة للحقول. على سبيل المثال، FieldNamingPolicy.IDENTITY هي السياسة الافتراضية، مما يعني أن اسم الحقل يبقى دون تغيير.

الحالات الحدية التي تم أخذها بعين الاعتبار في هذه المقارنة

Feature Jackson GSON

حقول إضافية

مستبعدة بشكل افتراضي، قابلة للتكوين.

مستبعدة بشكل افتراضي.

القيم الفارغة

يدعم @JsonInclude.

يتطلب .serializeNulls().

المراجع الدائرية

مدعومة باستخدام @JsonIdentityInfo.

غير مدعومة مباشرة.

معالجة البيانات

يدعم Java 8 Date API مع الوحدات.

يتطلب محولات نوع مخصصة.

التعددية

مدمجة مع @JsonTypeInfo.

يحتاج إلى منطق تحليل مخصص.

توجد بيانات JSON المدخلة التي تم اعتبارها للمقارنة مع مكتبات جاكسون وجسون على GitHub.

تمثيل فئة النموذج لـ JSON موجود على GitHub.

تنفيذ جاكسون

تم تحويل JSON أعلاه إلى كائن Java باستخدام مكتبات جاكسون أدناه:

XML

 

فئة تحليل JSON الرئيسية باستخدام مكتبة جاكسون:

Java

 

الناتج عن الفئة أعلاه هو كما يلي:

تنفيذ جيسون

اعتماد Gson المستخدم لتحويل JSON أعلاه إلى كائن Java هو أدناه:

XML

 

تحليل JSON باستخدام مكتبة GSON الرئيسيةالفئة:

Java

 

الناتج عن الفئة الرئيسية أعلاه هو كما يلي:

أي واحدة يجب أن أختار؟

تقدم جاكسون أداءً عالياً؛ لذلك يجب استخدامها عندما تتضمن المشاريع هياكل بيانات معقدة أو مجموعات بيانات كبيرة، في حين يجب استخدام Gson عندما تكون هناك مجموعات بيانات أصغر وهياكل بيانات بسيطة.

الختام

كلتا المكتبتين يمكنهما التعامل مع مجموعة البيانات أعلاه بفعالية وهما ممتازان أثناء معالجة تحليل JSON في جافا. يساعد المقارنة المذكورة أعلاه الشخص في اختيار المكتبة الصحيحة استنادًا إلى متطلبات المشروع.

تتوفر مقاطع الشفرة المذكورة أعلاه في مستودع GitHub.

تتوفر مقارنة مفصلة بين Jackson و Gson على Baeldung. تقدم وثائق جاكسون الرسمية معلومات مفصلة حول ميزات Jackson وتكوينه. بالمثل، توفر وثائق جسون دليل تنفيذي مفصل.

Source:
https://dzone.com/articles/jackson-vs-gson-edge-cases-json-parsing-java