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

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

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

ابدأ الدورة

مقدمة: لماذا نحتاج JSON في C++؟

\n

JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات يُستخدم على نطاق واسع في تطبيقات الويب وملفات التهيئة وواجهات برمجة التطبيقات (API). على الرغم من أن JSON نشأ في JavaScript، إلا أنه أصبح اليوم المعيار الفعلي لنقل البيانات المنظمة بين الخادم والعميل في أي لغة برمجة، بما في ذلك C++.

\n

في هذه المقالة، سنشرح كيفية العمل مع JSON في C++: تحليل (قراءة) وتسلسل (إنشاء) بيانات JSON. المحتوى موجه للمطورين المبتدئين الذين هم على دراية بأساسيات C++ (المتغيرات، الدوال، الفئات)، لكنهم لم يعملوا بعد مع JSON.

\n

للعمل مع JSON في C++، سنستخدم المكتبة الشهيرة nlohmann/json (المعروفة أيضًا باسم JSON for Modern C++). فهي سهلة التثبيت، بديهية، ومناسبة تمامًا للتعلم.

\n\n

تثبيت مكتبة nlohmann/json

\n

قبل كتابة الكود، يجب تضمين المكتبة. أسهل طريقة هي استخدام الإصدار header-only (ملف رأس واحد فقط).

\n\n

الطريقة 1: تنزيل ملف json.hpp

\n
    \n
  • انتقل إلى مستودع GitHub لـ nlohmann/json.
  • \n
  • قم بتنزيل ملف json.hpp من أحدث إصدار.
  • \n
  • ضعه في مجلد مشروعك.
  • \n
  • قم بتضمينه في الكود: #include "json.hpp"
  • \n
\n\n

الطريقة 2: استخدام مدير الحزم (vcpkg / Conan)

\n

إذا كنت تستخدم CMake، فإن أسهل طريقة هي تثبيت المكتبة عبر vcpkg:

\n
vcpkg install nlohmann-json
\n

أو عبر Conan:

\n
conan install nlohmann_json/3.11.2@
\n\n

بعد التثبيت، قم بتضمين المكتبة في الكود:

\n
#include <nlohmann/json.hpp>\nusing json = nlohmann::json;
\n\n

الآن أنت جاهز للعمل!

\n\n

تحليل JSON في C++: قراءة البيانات

\n

التحليل هو عملية تحويل سلسلة JSON إلى كائن يمكن التعامل معه في الكود. مكتبة nlohmann/json تجعل ذلك بسيطًا للغاية.

\n\n

مثال 1: تحليل سلسلة JSON

\n

لنفترض أن لدينا سلسلة JSON تحتوي على معلومات عن مستخدم:

\n
{\n  "name": "أليكسي",\n  "age": 30,\n  "is_student": false,\n  "hobbies": ["قراءة", "برمجة", "دراجة"]\n}
\n\n

يتم التحليل بسطر واحد:

\n
#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main() {\n    // سلسلة JSON الأصلية\n    std::string json_str = R"(\n    {\n        "name": "أليكسي",\n        "age": 30,\n        "is_student": false,\n        "hobbies": ["قراءة", "برمجة", "دراجة"]\n    }\n    )";\n\n    // التحليل\n    json data = json::parse(json_str);\n\n    // الوصول إلى البيانات\n    std::string name = data["name"];\n    int age = data["age"];\n    bool is_student = data["is_student"];\n    std::vector<std::string> hobbies = data["hobbies"];\n\n    // الإخراج\n    std::cout << "الاسم: " << name << std::endl;\n    std::cout << "العمر: " << age << std::endl;\n    std::cout << "طالب؟ " << (is_student ? "نعم" : "لا") << std::endl;\n    std::cout << "الهوايات: ";\n    for (const auto& hobby : hobbies) {\n        std::cout << hobby << " ";\n    }\n    std::cout << std::endl;\n\n    return 0;\n}
\n\n

نتيجة التنفيذ:

\n
الاسم: أليكسي\nالعمر: 30\nطالب؟ لا\nالهوايات: قراءة برمجة دراجة
\n\n

مثال 2: معالجة الكائنات المتداخلة

\n

غالبًا ما يحتوي JSON على هياكل متداخلة. لنأخذ مثالاً مع عنوان:

\n
{\n  "user": {\n    "name": "ماريا",\n    "address": {\n      "city": "موسكو",\n      "street": "تفيرسكايا"\n    }\n  }\n}
\n\n

الوصول إلى البيانات المتداخلة:

\n


                
                

المدونات

توصيات الكتب