العمل مع JSON في C++: التحليل والتسلسل عمليًا
\n\nJSON (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 وما فوق، كما توفر أداءً عاليًا وأمانًا في الأنواع.
تثبيت المكتبة بسيط:只需 تنزيل ملف الرأس الواحد json.hpp أو استخدام مدير الحزم vcpkg أو Conan أو CMake FetchContent.
#include <nlohmann/json.hpp>\nusing json = nlohmann::json;\n\nأساسيات تحليل JSON في C++
\n\nتحليل JSON هو عملية تحويل سلسلة نصية إلى بيانات منظمة. توفر مكتبة nlohmann/json عدة طرق للتحليل.
\n\nالتحليل من سلسلة نصية
\n\nالطريقة الأكثر شيوعًا هي استخدام الطريقة الثابتة json::parse():
#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() مع إمكانية التنسيق.
إنشاء كائن 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