معالجة JSON في C++: مكتبة nlohmann/json للعمل مع البيانات

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

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

ابدأ الدورة

معالجة JSON في C++ باستخدام مكتبة nlohmann/json



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



التثبيت والتضمين

مكتبة nlohmann/json هي مكتبة header-only (تتكون فقط من ملفات الرأس). لتثبيتها، يكفي تنزيل ملف واحد json.hpp من المستودع الرسمي وتضمينه في مشروعك:



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


إذا كنت تستخدم CMake، يمكنك تضمين المكتبة عبر FetchContent أو vcpkg. مثال لـ CMake:



FetchContent_Declare(json    GIT_REPOSITORY https://github.com/nlohmann/json.git    GIT_TAG v3.11.2)FetchContent_MakeAvailable(json)

target_link_libraries(your_project PRIVATE nlohmann_json::nlohmann_json)


الإمكانيات الأساسية للمكتبة

  • تحليل JSON من سلسلة نصية أو ملف – تحويل النص إلى بيانات منظمة.
  • إنشاء كائنات JSON – تكوين الهياكل ديناميكيًا باستخدام عوامل التشغيل [] والطرق.
  • الوصول إلى البيانات – قراءة القيم حسب المفاتيح والفهارس مع التحقق من الأنواع.
  • التسلسل – تحويل كائن JSON مرة أخرى إلى سلسلة نصية مع التنسيق.
  • العمل مع المصفوفات والكائنات المتداخلة – دعم الهياكل الهرمية المعقدة.
  • معالجة الأخطاء – استثناءات عند وجود بيانات أو أنواع غير صحيحة.


مثال 1: التحليل وقراءة البيانات

لنشرح مثالًا بسيطًا: لدينا سلسلة نصية تحتوي على JSON تحتوي على معلومات عن مستخدم. نقوم بتحليلها واستخراج القيم:



#include <iostream>#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main() { std::string json_str = R"( { "name": "إيفان", "age": 30, "is_student": false, "hobbies": ["قراءة", "برمجة", "رياضة"] } )";

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

// الوصول إلى البيانات مع التحقق من النوع std::string name = user["name"]; int age = user["age"]; bool is_student = user["is_student"];

std::cout << "الاسم: " << name << std::endl; std::cout << "العمر: " << age << std::endl; std::cout << "طالب: " << (is_student ? "نعم" : "لا") << std::endl;

// العمل مع المصفوفة auto& hobbies = user["hobbies"]; std::cout << "الهوايات: "; for (const auto& hobby : hobbies) { std::cout << hobby << " "; } std::cout << std::endl;

return 0;}


مثال 2: إنشاء JSON وتسلسله

غالبًا ما يكون مطلوبًا تكوين هيكل JSON برمجيًا. الكود التالي ينشئ كائنًا يحتوي على بيانات كتاب ويخرجه بصيغة منسقة:



#include <iostream>#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main() { // إنشاء كائن فارغ json book;

// ملء البيانات book["title"] = "الحرب والسلام"; book["author"] = "ليو تولستوي"; book["year"] = 1869; book["genres"] = {"رواية", "أدب تاريخي"};

// كائن متداخل book["publisher"]["name"] = "إكسمو";

توصيات