مقدمة في العمل مع JSON في C++
JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات يُستخدم على نطاق واسع في تطوير الويب وملفات التهيئة وواجهات برمجة التطبيقات (API). على الرغم من أن لغة C++ لا تحتوي على دعم مدمج لـ JSON، إلا أن هناك العديد من المكتبات التي تجعل العمل مع هذا التنسيق سهلاً ومريحاً. في هذه المقالة، سنستعرض كيفية تحليل (parse) وتسلسل (serialize) بيانات JSON في C++ باستخدام المكتبة الشهيرة nlohmann/json. المحتوى موجه للمطورين المبتدئين الذين لديهم معرفة أساسية بلغة C++.
1. تثبيت وتضمين مكتبة nlohmann/json
مكتبة nlohmann/json هي واحدة من أشهر وأسهل المكتبات استخداماً للعمل مع JSON في C++. تدعم C++11 وما فوق، وتعمل على جميع المنصات الرئيسية.
طرق التثبيت
- تحميل ملف الرأس (header file): انتقل إلى مستودع GitHub وقم بتحميل الملف
json.hpp. - التثبيت عبر vcpkg:
vcpkg install nlohmann-json - التثبيت عبر Conan:
conan install nlohmann_json/3.11.2@
بعد التثبيت، قم ببساطة بتضمين الملف في مشروعك:
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { std::cout << "المكتبة تم تضمينها!" << std::endl; return 0;}2. تحليل JSON: قراءة البيانات من سلسلة نصية وملف
تحليل JSON (parsing) هو عملية تحويل سلسلة نصية بتنسيق JSON إلى هياكل بيانات في C++. مكتبة nlohmann/json تجعل ذلك سهلاً للغاية.
التحليل من سلسلة نصية
لنلقِ نظرة على مثال لتحليل كائن JSON بسيط:
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { std::string json_str = R"({ "name": "آنا", "age": 25, "is_student": false, "hobbies": ["قراءة", "سباحة", "برمجة"] })";
// تحليل السلسلة النصية json data = json::parse(json_str);
// الوصول إلى البيانات std::string name = data["name"]; int age = data["age"]; bool is_student = data["is_student"]; std::vector<std::string> hobbies = data["hobbies"];
std::cout << "الاسم: " << name << std::endl; std::cout << "العمر: " << age << std::endl; std::cout << "طالب: " << (is_student ? "نعم" : "لا") << std::endl; std::cout << "الهوايات: "; for (const auto& hobby : hobbies) { std::cout << hobby << " "; } std::cout << std::endl;
return 0;}التحليل من ملف
غالباً ما تُخزّن بيانات JSON في ملفات. إليك كيفية قراءتها:
#include <iostream>#include <fstream>#include "json.hpp"using json = nlohmann::json;
int main() { std::ifstream file("data.json"); if (!file.is_open()) { std::cerr << "خطأ في فتح الملف!" << std::endl; return 1; }
json data = json::parse(file); file.close();
// عرض البيانات std::cout << "البيانات من الملف: " << data.dump(4) << std::endl; return 0;}الطريقة dump(4) تحول JSON مرة أخرى إلى سلسلة نصية مع مسافات بادئة مقدارها 4 مسافات لتسهيل القراءة.
3. التسلسل: إنشاء JSON من بيانات C++
التسلسل (serialization) هو العملية العكسية: تحويل بيانات C++ إلى سلسلة نصية JSON. تتيح المكتبة إنشاء كائنات JSON بطريقة بديهية.
إنشاء كائن JSON بسيط
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { json person;
person["name"] = "إيفان";