JSON से C++ Struct जनरेटर
JSON ऑब्जेक्ट्स से C++ स्ट्रक्ट (struct) डेफिनिशन बनाएँ। यह nlohmann/json के from_json और to_json फंक्शन मैक्रोज़ के साथ स्ट्रक्ट बनाता है, और JSON टाइप्स को सही C++ टाइप्स (जैसे std::string, int64_t, double, bool, और std::vector) से मैप करता है।
nlohmann/json मैक्रो बाइंडिंग्स के साथ C++ स्ट्रक्ट्स (structs) बनाता है।
JSON टाइप्स को C++ स्टैंडर्ड टाइप्स (std::string, int64_t, double, bool, std::vector<T>) से मैप करता है।
साफ़ JSON बाइंडिंग के लिए NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE मैक्रोज़ बनाता है।
नेस्टेड JSON ऑब्जेक्ट्स के लिए नेस्टेड स्ट्रक्ट डेफिनिशन बनाता है।
लोकप्रिय nlohmann/json सिंगल-हेडर लाइब्रेरी के साथ कम्पैटिबल।
कैसे इस्तेमाल करें
इनपुट फ़ील्ड में JSON ऑब्जेक्ट पेस्ट करें
यह जनरेटर nlohmann/json मैक्रोज़ के साथ C++ स्ट्रक्ट डेफिनिशन बनाता है।
अपने प्रोजेक्ट में nlohmann/json.hpp को शामिल करें।
अपने structs को deserialize करने के लिए nlohmann::json::parse और get<T>() का इस्तेमाल करें।
C++ एप्लिकेशन
- C++ क्लाइंट्स में REST API रिस्पॉन्स को पार्स करें
- C++ सर्विसेज़ में JSON कॉन्फ़िगरेशन फ़ाइलें पढ़ें
- एम्बेडेड सिस्टम में JSON मैसेज को डीसीरियलाइज़ करें
गेम डेवलपमेंट
- गेम कॉन्फ़िगरेशन JSON फ़ाइलों को पार्स करें
- JSON एसेट्स से लेवल डेटा लोड करें
- गेम सर्वर में नेटवर्क पेलोड को डीसीरियलाइज़ करें
C++ एनवायरनमेंट
- CMake प्रोजेक्ट्स
- गेम इंजन
- एम्बेडेड लिनक्स सेवाएँ
- हाई-परफॉर्मेंस बैकएंड
ऑप्शनल JSON फ़ील्ड्स के लिए, मैक्रो की जगह std::optional<T> (C++17) और कस्टम from_json फ़ंक्शन का इस्तेमाल करें।
nlohmann/json को सिंगल-हेडर डिपेंडेंसी के तौर पर या CMake FetchContent के ज़रिए शामिल करें — यह सबसे लोकप्रिय C++ लाइब्रेरीज़ में से एक है।
बिना डेसिमल वाले JSON नंबर ज़्यादा से ज़्यादा रेंज के लिए int64_t बन जाते हैं; अगर आपको पक्का पता है कि वैल्यूज़ इसमें आ जाएँगी और मेमोरी कम है, तो मैन्युअली int32_t का इस्तेमाल करें।
ऐसे JSON फ़ील्ड्स के लिए std::optional<T> (C++17) का इस्तेमाल करें जो null हो सकते हैं या मौजूद नहीं हो सकते, ताकि key न होने पर undefined behavior से बचा जा सके।
JSON इंटीजर फ़ील्ड्स के लिए int के बजाय int64_t का इस्तेमाल करें, ताकि बड़ी आइडेंटिफ़ायर वैल्यूज़ और टाइमस्टैम्प्स को सुरक्षित रूप से हैंडल किया जा सके।
अपने डिपेंडेंसी मैनेजमेंट को व्यवस्थित रखने के लिए, हेडर को मैन्युअल रूप से कॉपी करने के बजाय CMake FetchContent या vcpkg के ज़रिए nlohmann/json को जोड़ें।
अक्सर पूछे जाने वाले सवाल
हमारे टूल्स और सेवाओं के बारे में आम सवालों के जवाब पाएँ।
JSON से C++ Struct को समझना
C++ का इस्तेमाल उन क्षेत्रों में बड़े पैमाने पर किया जाता है जहाँ परफॉर्मेंस, कम लेटेंसी और सीधे हार्डवेयर एक्सेस बहुत ज़रूरी होते हैं — जैसे गेम इंजन, रियल-टाइम सिस्टम, हाई-फ़्रीक्वेंसी ट्रेडिंग, रोबोटिक्स, एम्बेडेड लिनक्स सर्विस और साइंटिफिक कंप्यूटिंग। ये सिस्टम तेज़ी से REST API, माइक्रो-सर्विस और कॉन्फ़िगरेशन सिस्टम के साथ कम्युनिकेट करते हैं, जो डेटा फ़ॉर्मैट के तौर पर JSON का इस्तेमाल करते हैं। जहाँ पहले C++ को बाइनरी प्रोटोकॉल और कस्टम सीरियलाइज़ेशन फ़ॉर्मैट से जोड़ा जाता था, वहीं मॉडर्न C++ इकोसिस्टम ने nlohmann/json लाइब्रेरी के ज़रिए JSON को अपना लिया है; यह GitHub पर सबसे ज़्यादा स्टार पाने वाले C++ प्रोजेक्ट्स में से एक बन गया है। इसका सिंगल-हेडर डिस्ट्रिब्यूशन मॉडल और आसान API इसे उन C++ प्रोजेक्ट्स में JSON हैंडलिंग के लिए पसंदीदा विकल्प बनाते हैं, जिनमें JSON पार्सिंग के लिए परफॉर्मेंस की बहुत सख़्त सीमाएँ नहीं होती हैं।
nlohmann/json लाइब्रेरी JSON को C++ टाइप्स में बदलने (डिसरियलाइज़ेशन) के कई तरीके देती है। साधारण स्ट्रक्चर्ड डेटा के लिए, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE मैक्रो सबसे आसान तरीका है: यह एक स्ट्रक्ट टाइप का नाम और फ़ील्ड नामों की लिस्ट लेता है, और फिर अपने-आप from_json और to_json फ़ंक्शन बनाता है जो JSON कीज़ को नाम के आधार पर स्ट्रक्ट फ़ील्ड्स से मैप करते हैं। इस मैक्रो-आधारित तरीके में स्ट्रक्ट डेफ़िनिशन में किसी बदलाव की ज़रूरत नहीं होती, जिससे यह नॉन-इंट्रूसिव (बिना दखल वाला) बन जाता है और उन हेडर फ़ाइलों में परिभाषित स्ट्रक्ट्स के साथ भी काम करता है जो ऐसे कोड के साथ शेयर की जाती हैं जिनमें nlohmann/json का इस्तेमाल नहीं होता। बनी हुई बाइंडिंग को कंपाइल टाइम पर टेम्प्लेट स्पेशलाइज़ेशन के ज़रिए टाइप-चेक किया जाता है, जिससे JSON और C++ स्ट्रक्ट के बीच टाइप मिसमैच का पता रनटाइम के बजाय बिल्ड टाइम पर ही चल जाता है।
C++ के टाइप सिस्टम में JSON की डायनामिक रूप से टाइप की गई वैल्यूज़ को स्टैटिक रूप से टाइप किए गए C++ फ़ील्ड्स में सावधानी से मैप करने की ज़रूरत होती है। JSON स्ट्रिंग्स `std::string` बन जाती हैं। JSON इंटीजर्स `int64_t` बन जाते हैं ताकि 32-बिट और 64-बिट प्लेटफ़ॉर्म्स पर ज़्यादा से ज़्यादा रेंज पोर्टेबिलिटी मिल सके और बड़े API आइडेंटिफ़ायर्स या टाइमस्टैम्प्स के लिए `int` या `int32_t` इस्तेमाल करने पर होने वाले ओवरफ़्लो के जोखिम से बचा जा सके। JSON फ़्लोटिंग-पॉइंट नंबर्स `double` बन जाते हैं। JSON बूलियन्स `bool` बन जाते हैं। JSON एरेज़ सही एलिमेंट टाइप के साथ `std::vector<T>` बन जाते हैं। JSON null सबसे मुश्किल मामला है: C++ में वैल्यू टाइप्स के लिए कोई इन-बिल्ट null रेफरेंस सिमेंटिक्स नहीं है, इसलिए nullable JSON फ़ील्ड्स में मौजूद/अनुपस्थित (present/absent) के फ़र्क़ को सही ढंग से दिखाने के लिए `std::optional<T>` (जो C++17 से उपलब्ध है) की ज़रूरत होती है।
यह JSON से C++ Struct जनरेटर, NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE मैक्रो बाइंडिंग्स, ऊपर बताए गए मैपिंग नियमों के अनुसार स्टैंडर्ड C++ फ़ील्ड प्रकारों, और नेस्टेड JSON ऑब्जेक्ट्स के लिए नेस्टेड struct परिभाषाओं के साथ struct परिभाषाएँ बनाता है। इसका आउटपुट मॉडर्न C++ स्टैंडर्ड्स (बेसिक फ़ीचर्स के लिए C++11 और उससे ऊपर, std::optional के लिए C++17) के साथ कम्पैटिबल है। जेनरेट किए गए कोड को कम्पाइल और रन करने के लिए बस nlohmann/json सिंगल-हेडर फ़ाइल को जोड़ना या CMake के FetchContent कमांड के ज़रिए इसे शामिल करना ज़रूरी है। API क्लाइंट्स, गेम डेटा लोडर्स, कॉन्फ़िगरेशन पार्सर्स, या नेटवर्क मैसेज डीसीरियलाइज़र्स बनाने वाले C++ डेवलपर्स के लिए, यह जनरेटर किसी भी JSON इंटीग्रेशन के लिए ज़रूरी डेटा मॉडलिंग के काम में काफ़ी मदद करता है।