RapidJSON لـ C++: دليل شامل مع أمثلة عملية

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

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

ابدأ الدورة

RapidJSON لـ C++: دليل شامل مع أمثلة عملية

RapidJSON هي مكتبة عالية الأداء لتحليل (Parsing) وإنشاء (Generating) بيانات JSON بلغة C++. تم تطويرها بواسطة Milo Yip وهي مرخصة تحت رخصة MIT. اكتسبت المكتبة شهرة واسعة بفضل سرعتها الفائقة، استهلاكها المنخفض للذاكرة، وامتثالها الكامل لمعيار ECMA-404 (RFC 7159). على عكس العديد من المكتبات الأخرى، لا تتطلب RapidJSON أي تبعيات خارجية ويمكنها العمل في بيئات محدودة الموارد، بما في ذلك الأنظمة المضمنة.

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

تدعم المكتبة التحليل الكامل لـ JSON (مع التحقق من الصحة) بالإضافة إلى وضع "غير حساس" لتسريع العملية. كما أنها تتعامل مع ترميزات UTF-8 و UTF-16 و UTF-32، وتوفر أدوات تكرار (iterators) ودوال بحث مريحة. تُستخدم RapidJSON بنشاط في مشاريع مثل MongoDB و Tencent والعديد من الحلول مفتوحة المصدر.

طريقة التثبيت

RapidJSON هي مكتبة تعتمد على ملفات الرأس فقط (header-only) باستثناء بعض الملفات الاختيارية للبناء. هذا يعني أنه لاستخدامها، يكفي نسخ ملفات الرأس إلى مشروعك وتضمينها. ولكن للراحة، سنستعرض ثلاث طرق رئيسية للتثبيت.

الطريقة الأولى: استنساخ المستودع (موصى به)

قم باستنساخ المستودع من GitHub وانسخ مجلد include/rapidjson إلى مشروعك.

git clone https://github.com/Tencent/rapidjson.git
# ثم انسخ مجلد include/rapidjson إلى مشروعك

الطريقة الثانية: عبر مدير الحزم vcpkg

إذا كنت تستخدم vcpkg، يمكنك التثبيت بأمر واحد:

vcpkg install rapidjson

الطريقة الثالثة: عبر Conan

لمستخدمي Conan (مدير حزم C/C++):

conan install rapidjson/1.1.0@

تضمين المكتبة في الكود

بعد التثبيت، أضف إلى ملف المصدر الخاص بك:

#include "rapidjson/document.h"     // لواجهة DOM
#include "rapidjson/writer.h"       // لكتابة JSON
#include "rapidjson/stringbuffer.h" // لتخزين المخرجات
#include "rapidjson/prettywriter.h" // لمخرجات منسقة
#include "rapidjson/reader.h"       // لواجهة SAX
#include "rapidjson/error/en.h"     // لمعالجة الأخطاء

بداية سريعة: مثال عملي بسيط

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

#include <iostream>
#include "rapidjson/document.h"

int main() {
    // 1. سلسلة JSON للتحليل
    const char* json = "{\"project\":\"RapidJSON\",\"version\":1.0}";

    // 2. إنشاء مستند DOM
    rapidjson::Document doc;
    doc.Parse(json);

    // 3. التحقق من نجاح التحليل
    if (doc.HasParseError()) {
        std::cerr << "خطأ في التحليل: " 
                  << rapidjson::GetParseError_En(doc.GetParseError()) 
                  << std::endl;
        return 1;
    }

    // 4. استخراج القيم باستخدام المفاتيح
    const std::string& project = doc["project"].GetString();
    double version = doc["version"].GetDouble();

    // 5. طباعة النتيجة
    std::cout << "المشروع: " << project << std::endl;
    std::cout << "الإصدار: " << version << std::endl;

    return 0;
}

توصيات