इस लेख में
Dart/Flutter डेवलपर्स को JSON क्लास जनरेशन की ज़रूरत क्यों है
Flutter एप्लिकेशन API कम्युनिकेशन के लिए काफ़ी हद तक JSON पर निर्भर रहते हैं, लेकिन दूसरी भाषाओं के Gson या Jackson की तरह Dart में बिल्ट-इन JSON-से-ऑब्जेक्ट मैपिंग नहीं होती। हर API रिस्पॉन्स के लिए एक मॉडल क्लास की ज़रूरत पड़ती है जिसमें fromJson और toJson फ़ैक्टरी मेथड मैन्युअली लिखने पड़ते हैं। जो ऐप्स कई एंडपॉइंट्स इस्तेमाल करते हैं, उनके लिए यह बॉयलरप्लेट तेज़ी से बढ़ता जाता है — हमारा कन्वर्टर JSON सैंपल से पूरी Dart मॉडल क्लास तुरंत जनरेट कर देता है, जिससे घंटों की दोहराव भरी कोडिंग बच जाती है।
जब से Dart 2.12 में साउंड null safety आई है, आपकी मॉडल क्लास की हर फ़ील्ड को साफ़ तौर पर nullable या non-nullable के रूप में टाइप करना ज़रूरी हो गया है। कन्वर्टर आपके JSON डेटा का विश्लेषण करके हर फ़ील्ड के लिए सही nullability तय करता है और ऐसे मॉडल बनाता है जो शुरू से ही Dart के null safety सिस्टम के साथ सही तरीके से काम करते हैं।
fromJson/toJson पैटर्न
कन्वर्टर पूरे Flutter इकोसिस्टम में इस्तेमाल होने वाले स्टैंडर्ड फ़ैक्टरी कंस्ट्रक्टर पैटर्न के अनुसार Dart क्लासेस जनरेट करता है।
- factory fromJson — एक फ़ैक्टरी कंस्ट्रक्टर जनरेट करता है जो Map<String, dynamic> लेता है और सही टाइप कास्टिंग, null चेक और नेस्टेड ऑब्जेक्ट पार्सिंग के साथ सभी फ़ील्ड्स को इनिशियलाइज़ करता है
- toJson मेथड — एक toJson() मेथड बनाता है जो सीरियलाइज़ेशन के लिए Map<String, dynamic> लौटाता है, और नेस्टेड ऑब्जेक्ट्स को रिकर्सिवली उनके toJson() मेथड्स कॉल करके संभालता है
- नेस्टेड मॉडल जनरेशन — जब JSON में नेस्टेड ऑब्जेक्ट होते हैं, तो कन्वर्टर हर नेस्टेड स्ट्रक्चर के लिए अलग Dart क्लास बनाता है, जिसके अपने fromJson/toJson मेथड होते हैं और जो पैरेंट क्लास से सही तरह जुड़े होते हैं
निःशुल्क आज़माएँ — कोई साइनअप आवश्यक नहीं
JSON को Dart में बदलें →Null Safety और json_serializable इंटीग्रेशन
कन्वर्टर null-safe Dart कोड जनरेट करता है जो आधुनिक Flutter डेवलपमेंट प्रैक्टिस के अनुकूल होता है।
- साउंड null safety — JSON सैंपल में जिन फ़ील्ड्स की वैल्यू null होती है उन्हें nullable (String?) टाइप किया जाता है, जबकि मौजूद वैल्यू वाली फ़ील्ड्स non-nullable टाइप (String) इस्तेमाल करती हैं, और fromJson कंस्ट्रक्टर में उपयुक्त null चेक जोड़े जाते हैं
- json_serializable अनुकूलता — जनरेट की गई क्लास संरचना json_serializable पैकेज के अनुकूल होती है, जिससे आप build_runner के साथ कोड जनरेशन के लिए @JsonSerializable() और @JsonKey एनोटेशन जोड़ सकते हैं
- List हैंडलिंग — ऑब्जेक्ट्स की arrays .map() और .toList() के साथ fromJson में सही मैपिंग करते हुए List<ChildModel> टाइप जनरेट करती हैं, और nullable व non-nullable दोनों तरह की list स्थितियों को संभालती हैं
अक्सर पूछे जाने वाले सवाल
क्या मुझे इसके बजाय freezed पैकेज इस्तेमाल करना चाहिए?
freezed पैकेज Dart क्लासेस में immutability, union types और पैटर्न मैचिंग का सपोर्ट जोड़ता है, लेकिन इसके लिए build_runner सेटअप की ज़रूरत होती है और यह कंपाइल-टाइम जटिलता बढ़ाता है। हमारा कन्वर्टर सामान्य Dart क्लासेस जनरेट करता है जो बिना किसी कोड जनरेशन डिपेंडेंसी के काम करती हैं। बाद में आप एनोटेशन जोड़कर आउटपुट को freezed में माइग्रेट कर सकते हैं — फ़ील्ड के नाम और टाइप वही रहते हैं।
कन्वर्टर नेस्टेड JSON मॉडल को कैसे संभालता है?
हर नेस्टेड JSON ऑब्जेक्ट एक अलग Dart क्लास बन जाता है जिसका अपना fromJson फ़ैक्टरी और toJson मेथड होता है। पैरेंट क्लास अपने टाइप डिक्लेरेशन में चाइल्ड क्लास को रेफ़र करती है और अपने फ़ैक्टरी कंस्ट्रक्टर में ChildModel.fromJson() कॉल करती है। गहराई तक नेस्टेड संरचनाएँ सही टाइप हायरार्की के साथ पूरी तरह सपोर्ट होती हैं।
जनरेट किए गए कोड में List फ़ील्ड्स कैसे संभाली जाती हैं?
प्रिमिटिव की lists सामान्य टाइप्ड lists (List<String>, List<int>) जनरेट करती हैं। ऑब्जेक्ट्स की lists fromJson मैपिंग के साथ List<ChildModel> जनरेट करती हैं: (json['items'] as List).map((e) => ChildModel.fromJson(e)).toList()। Nullable lists में null चेक शामिल होते हैं, और खाली arrays के लिए सही टाइप वाली खाली list डिफ़ॉल्ट जनरेट होती है।