مقدمة: لماذا نحتاج JSON في C++؟
\nJSON (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
الطريقة 2: استخدام مدير الحزم (vcpkg / Conan)
\nإذا كنت تستخدم CMake، فإن أسهل طريقة هي تثبيت المكتبة عبر vcpkg:
\nvcpkg install nlohmann-json\nأو عبر Conan:
\nconan 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المدونات
توصيات الكتب
اقرأ أيضًا