العمل مع JSON في C++: تحليل البيانات وتسلسلها

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع JSON في C++: التحليل والتسلسل



JSON (JavaScript Object Notation) لا يزال واحدًا من أكثر التنسيقات شيوعًا لتبادل البيانات في تطبيقات الويب وملفات التكوين وواجهات برمجة التطبيقات (API). على الرغم من أن لغة C++ لا تحتوي على دعم مدمج لـ JSON، إلا أن هناك العديد من المكتبات القوية التي تجعل العمل مع هذا التنسيق سهلاً وفعالاً. في هذه المقالة، سننظر في اثنتين من أشهر المكتبات: nlohmann/json (موصى بها لمعظم المشاريع) و RapidJSON (للمهام التي تكون فيها الأداء حرجًا). ستتعلم كيفية تحليل JSON، وتسلسل الكائنات مرة أخرى إلى سلسلة نصية، ومعالجة الأخطاء.



لماذا نحتاج JSON في C++؟



C++ هي لغة برمجة أنظمة، لكن التطبيقات الحديثة تتطلب بشكل متزايد التفاعل مع خدمات الويب، وتخزين التكوينات، أو تبادل البيانات بين الخدمات المصغرة. يوفر JSON تنسيقًا مناسبًا وقابلاً للقراءة البشرية لهذه المهام. يسمح استخدام المكتبات للعمل مع JSON في C++ بما يلي:

  • تحميل ومعالجة ملفات التكوين (على سبيل المثال، لمحركات الألعاب أو الخوادم).
  • التفاعل مع REST API (إرسال واستقبال البيانات).
  • حفظ واستعادة حالة هياكل البيانات المعقدة.
  • التكامل مع اللغات والأنظمة الأخرى التي تستخدم JSON.


مكتبة nlohmann/json: البساطة والراحة



مكتبة nlohmann/json (غالبًا ما تسمى "JSON for Modern C++") هي على الأرجح الأكثر شعبية بفضل واجهة برمجة التطبيقات البديهية التي تذكرنا بالعمل مع Python أو JavaScript. وهي تدعم C++11 وما فوق.



التثبيت

أسهل طريقة هي نسخ ملف الرأس الوحيد json.hpp إلى مشروعك. يمكنك تنزيله من المستودع الرسمي أو تثبيته عبر مدير الحزم (vcpkg, Conan).



تحليل JSON من سلسلة نصية

لننظر إلى مثال أساسي لتحليل سلسلة JSON والوصول إلى البيانات:

#include <iostream>#include <nlohmann/json.hpp>using json = nlohmann::json;

int main() { // سلسلة JSON للتحليل std::string json_string = R"({ "name": "С++", "version": 17, "features": ["RAII", "Templates", "Smart Pointers"], "is_compiled": true })";

// تحليل السلسلة إلى كائن json json data = json::parse(json_string);

// الوصول إلى القيم std::cout << "اللغة: " << data["name"] << std::endl; std::cout << "الإصدار: " << data["version"] << std::endl; std::cout << "مُجمّع: " << data["is_compiled"] << std::endl;

// الوصول إلى المصفوفة for (auto& feature : data["features"]) { std::cout << " - " << feature << std::endl; } return 0;}

المخرجات:

اللغة: "С++"الإصدار: 17مُجمّع: true - "RAII" - "Templates" - "Smart Pointers"


التسلسل (إنشاء JSON)

إنشاء كائن JSON وتحويله إلى سلسلة نصية هو بنفس السهولة:

#include <iostream>#include <nlohmann/json.hpp>using json = nlohmann::json;

int main() { // إنشاء كائن JSON json person; person["name"] = "Alice"; person["age"] = 30; person["is_student"] = false; person["hobbies"] = {"reading", "coding", "chess"};

// إضافة كائن متداخل person["address"]["city"] = "Moscow"; person["address"]["zip"] = "101000";

// التسلسل إلى سلسلة نصية مع مسافات بادئة std::string serialized = person.dump(4); // 4 مسافات للمسافة البادئة std::cout << serialized << std::endl;

return 0;}

الطريقة dump(4) ترجع سلسلة نصية منسقة بشكل جميل. للإخراج المضغوط، استخدم

المدونات

توصيات الكتب