C++ में JSON के साथ काम करना: पार्सिंग और सीरियलाइज़ेशन
JSON (JavaScript Object Notation) वेब एप्लिकेशन, कॉन्फ़िगरेशन फ़ाइलों और API में डेटा आदान-प्रदान के लिए सबसे लोकप्रिय फ़ॉर्मेट में से एक बना हुआ है। हालाँकि C++ में JSON के लिए अंतर्निहित समर्थन नहीं है, फिर भी कई शक्तिशाली लाइब्रेरीज़ हैं जो इस फ़ॉर्मेट के साथ काम करना सरल और कुशल बनाती हैं। इस लेख में हम दो सबसे लोकप्रिय लाइब्रेरीज़ पर विचार करेंगे: nlohmann/json (अधिकांश प्रोजेक्ट्स के लिए अनुशंसित) और RapidJSON (उन कार्यों के लिए जहाँ प्रदर्शन महत्वपूर्ण है)। आप सीखेंगे कि JSON को कैसे पार्स करें, ऑब्जेक्ट्स को वापस स्ट्रिंग में कैसे सीरियलाइज़ करें और त्रुटियों को कैसे संभालें।
C++ में JSON की आवश्यकता क्यों है?
C++ एक सिस्टम प्रोग्रामिंग भाषा है, लेकिन आधुनिक एप्लिकेशन को तेजी से वेब सेवाओं के साथ बातचीत करने, कॉन्फ़िगरेशन संग्रहीत करने या माइक्रोसर्विसेज के बीच डेटा का आदान-प्रदान करने की आवश्यकता होती है। JSON इन कार्यों के लिए एक सुविधाजनक, मानव-पठनीय फ़ॉर्मेट प्रदान करता है। C++ में JSON के साथ काम करने के लिए लाइब्रेरीज़ का उपयोग करने से आप यह कर सकते हैं:
- कॉन्फ़िगरेशन फ़ाइलों को लोड और प्रोसेस करना (उदाहरण के लिए, गेम इंजन या सर्वर के लिए)।
- REST API के साथ इंटरैक्ट करना (डेटा भेजना और प्राप्त करना)।
- जटिल डेटा संरचनाओं की स्थिति को सहेजना और पुनर्स्थापित करना।
- JSON का उपयोग करने वाली अन्य भाषाओं और सिस्टम के साथ एकीकृत करना।
nlohmann/json लाइब्रेरी: सरलता और सुविधा
nlohmann/json लाइब्रेरी (जिसे अक्सर "JSON for Modern C++" कहा जाता है) अपने सहज ज्ञान युक्त API के कारण शायद सबसे लोकप्रिय है, जो Python या JavaScript के साथ काम करने की याद दिलाता है। यह C++11 और उससे ऊपर का समर्थन करती है।
स्थापना
सबसे आसान तरीका है कि एकल हेडर फ़ाइल json.hpp को अपने प्रोजेक्ट में कॉपी करें। आप इसे आधिकारिक रिपॉजिटरी से डाउनलोड कर सकते हैं या पैकेज मैनेजर (vcpkg, Conan) के माध्यम से इंस्टॉल कर सकते हैं।
स्ट्रिंग से JSON पार्स करना
आइए JSON स्ट्रिंग को पार्स करने और डेटा तक पहुँचने के एक बुनियादी उदाहरण पर विचार करें:
#include <iostream>#include <nlohmann/json.hpp>using json = nlohmann::json;
int main() { // पार्स करने के लिए JSON स्ट्रिंग std::string json_string = R"({ "name": "C++", "version": 17, "features": ["RAII", "Templates", "Smart Pointers"], "is_compiled": true })";
// स्ट्रिंग को json ऑब्जेक्ट में पार्स करना json data = json::parse(json_string);
// मानों तक पहुँच std::cout << "भाषा: " << data["name"] << std::endl; std::cout << "संस्करण: " << data["version"] << std::endl; std::cout << "संकलित: " << data["is_compiled"] << std::endl;
// ऐरे तक पहुँच for (auto& feature : data["features"]) { std::cout << " - " << feature << std::endl; } return 0;}आउटपुट:
भाषा: "C++"संस्करण: 17संकलित: true - "RAII" - "Templates" - "Smart Pointers"सीरियलाइज़ेशन (JSON बनाना)
JSON ऑब्जेक्ट बनाना और उसे स्ट्रिंग में बदलना भी उतना ही सरल है:
#include <iostream>#include <nlohmann/json.hpp>using json = nlohmann::json;
int main() { // JSON ऑब्जेक्ट बनाएं json person; person["name"] = "Alice"; person["age"] = 30; person["is_student"] = false; person["hobbies"] = {"reading", "coding", "chess"};
// नेस्टेड ऑब्जेक्ट जोड़ें person["address"]["city"] = "Moscow"; person["address"]["zip"] = "101000";
// इंडेंटेशन के साथ स्ट्रिंग में सीरियलाइज़ करें std::string serialized = person.dump(4); // इंडेंटेशन के लिए 4 स्पेस std::cout << serialized << std::endl;
return 0;}विधि dump(4) एक खूबसूरती से फ़ॉर्मेट की गई स्ट्रिंग लौटाती है। कॉम्पैक्ट आउटपुट के लिए, उपयोग करें
```