مقدمة في العمل مع JSON في Java
JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات يُستخدم على نطاق واسع في تطبيقات الويب الحديثة وواجهات برمجة التطبيقات والخدمات المصغرة. على الرغم من اسمه، فإن JSON ليس مرتبطًا بلغة JavaScript وهو مدعوم جيدًا في Java. في هذه المقالة، سندرس بالتفصيل كيفية إجراء تحليل (Parsing) وتسلسل (Serialization) وإلغاء التسلسل (Deserialization) لـ JSON في Java باستخدام المكتبات الشائعة: Jackson و Gson.
تُعد القدرة على العمل مع JSON مهارة إلزامية لمطور Java. سواء كان الأمر يتعلق بقراءة ملفات التكوين، أو التفاعل مع REST APIs، أو نقل البيانات بين الخدمات المصغرة — فإن JSON موجود في كل مكان. سننظر في كلا الأسلوبين لتتمكن من اختيار الأنسب لمشروعك.
المكتبات الرئيسية للعمل مع JSON في Java
في نظام Java البيئي، هناك العديد من المكتبات الشائعة للعمل مع JSON. اثنتان منها هما المعيار الفعلي:
- Jackson — المكتبة الأكثر شيوعًا، والمضمنة في Spring Boot. تتميز بأداء عالٍ وخيارات تخصيص واسعة.
- Gson — مكتبة من Google، سهلة الاستخدام وخفيفة الوزن. وهي مثالية للمشاريع الصغيرة.
كلتا المكتبتين تدعمان الدورة الكاملة للعمل مع JSON: التسلسل (كائن ← JSON)، وإلغاء التسلسل (JSON ← كائن)، والمعالجة التدفقية.
إضافة التبعيات
للعمل مع المكتبات، تحتاج إلى إضافتها إلى مشروعك. إذا كنت تستخدم Maven، أضف التبعيات التالية إلى pom.xml:
<!-- Jackson --><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version></dependency>
<!-- Gson --><dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version></dependency>بالنسبة لـ Gradle، أضف السطور إلى build.gradle:
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'implementation 'com.google.code.gson:gson:2.10.1'تسلسل كائنات Java إلى JSON
التسلسل هو عملية تحويل كائن Java إلى سلسلة JSON. دعنا ننظر إلى كلا الأسلوبين.
التسلسل باستخدام Jackson
يستخدم Jackson فئة ObjectMapper للتسلسل. مثال:
import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.core.JsonProcessingException;
public class JacksonSerialization { public static void main(String[] args) throws JsonProcessingException { // Create an object for serialization User user = new User("Ivan", "ivan@example.com", 25); // Create ObjectMapper ObjectMapper mapper = new ObjectMapper(); // Serialize to JSON String json = mapper.writeValueAsString(user); System.out.println(json); // Output: {"name":"Ivan","email":"ivan@example.com","age":25} }}
class User { private String name; private String email; private int age; // Constructor, getters and setters public User(String name, String email, int age) { this.name = name; this.email = email; this.age = age; } public String getName() { return name; } public String getEmail() { return email; } public int getAge() { return age; }}التسلسل باستخدام Gson
يستخدم Gson فئة Gson مع طريقة toJson():
import com.google.gson.Gson;
public class GsonSerialization { public static void main(String[] args) { User user = new User("Maria", "maria@example.com", 30); Gson gson = n