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

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

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

ابدأ الدورة

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

\n\n

JSON (JavaScript Object Notation) هو أحد أشهر تنسيقات تبادل البيانات في التطبيقات الحديثة. على الرغم من أن لغة C++ لا تحتوي على دعم مدمج لـ JSON، إلا أن هناك العديد من المكتبات التي تسهل العمل مع هذا التنسيق. في هذه المقالة، سنستعرض الجوانب العملية لتحليل وتسلسل JSON في C++ باستخدام مكتبة nlohmann/json - واحدة من أشهر المكتبات وأسهلها في الاستخدام.

\n\n

لماذا تختار nlohmann/json؟

\n\n

مكتبة nlohmann/json (التي تُسمى غالبًا JSON for Modern C++) اكتسبت شهرة بفضل واجهة برمجة التطبيقات البديهية التي تذكرنا بالعمل مع حاويات STL. وهي مكتبة header-only (لا تتطلب بناء)، وتدعم C++11 وما فوق، كما توفر أداءً عاليًا وأمانًا في الأنواع.

\n\n

تثبيت المكتبة بسيط:只需 تنزيل ملف الرأس الواحد json.hpp أو استخدام مدير الحزم vcpkg أو Conan أو CMake FetchContent.

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

أساسيات تحليل JSON في C++

\n\n

تحليل JSON هو عملية تحويل سلسلة نصية إلى بيانات منظمة. توفر مكتبة nlohmann/json عدة طرق للتحليل.

\n\n

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

\n\n

الطريقة الأكثر شيوعًا هي استخدام الطريقة الثابتة json::parse():

\n\n
#include <iostream>\n#include <string>\n#include <nlohmann/json.hpp>\n\nint main() {\n    std::string json_string = R"({\n        "name": "إيفان",\n        "age": 30,\n        "is_student": false,\n        "skills": ["C++", "Python", "JavaScript"],\n        "address": {\n            "city": "موسكو",\n            "zip": "101000"\n        }\n    })";\n\n    try {\n        json data = json::parse(json_string);\n        \n        // الوصول إلى البيانات\n        std::cout << "الاسم: " << data["name"] << std::endl;\n        std::cout << "العمر: " << data["age"] << std::endl;\n        std::cout << "طالب: " << (data["is_student"] ? "نعم" : "لا") << std::endl;\n        \n        // العمل مع المصفوفات\n        for (auto& skill : data["skills"]) {\n            std::cout << "مهارة: " << skill << std::endl;\n        }\n        \n        // العمل مع الكائنات المتداخلة\n        std::cout << "المدينة: " << data["address"]["city"] << std::endl;\n        \n    } catch (json::parse_error& e) {\n        std::cerr << "خطأ في التحليل: " << e.what() << std::endl;\n    }\n    \n    return 0;\n}
\n\n

التحليل من ملف

\n\n

للعمل مع الملفات، استخدم تدفقات الإدخال/الإخراج في C++:

\n\n
#include <fstream>\n#include <nlohmann/json.hpp>\n\nint main() {\n    std::ifstream file("data.json");\n    if (!file.is_open()) {\n        std::cerr << "فشل فتح الملف" << std::endl;\n        return 1;\n    }\n    \n    try {\n        json data = json::parse(file);\n        std::cout << "تم تحميل البيانات: " << data.dump(2) << std::endl;\n    } catch (json::parse_error& e) {\n        std::cerr << "خطأ: " << e.what() << std::endl;\n    }\n    \n    return 0;\n}
\n\n

تسلسل JSON في C++

\n\n

التسلسل هو العملية العكسية: تحويل بيانات C++ إلى سلسلة JSON. توفر المكتبة طريقة dump() مع إمكانية التنسيق.

\n\n

إنشاء كائن JSON

\n\n

يمكنك إنشاء كائنات JSON مباشرة، مثل المصفوفات الترابطية العادية:

\n\n
#include <nlohmann/json.hpp>\n#include <iostream>\n\nint main() {\n    json person;\n    person["name"] = "ماريا";\n    person["age"] = 25;\n    person["is_employed"] = true;\n    person["languages"] = {"الروسية", "الإنجليزية", "الألمانية"};\n    \n                

المدونات

توصيات الكتب