गो में JSON अनमर्शलिंग के लिए कस्टम प्रकार प्राप्त करना
गो में कस्टम प्रकारों के साथ काम करते समय, सक्षम करने के लिए अक्सर UnmarshalJSON फ़ंक्शन को लागू करना आवश्यक होता है JSON से वांछित प्रकार में स्वचालित रूपांतरण। हालाँकि, चुनौतियाँ तब उत्पन्न होती हैं जब प्रकार एक अदिश मान से प्राप्त होता है। यह आलेख इस समस्या को दूर करने के लिए एक समाधान तलाशता है।
व्यक्ति आईडी प्रकार के उदाहरण पर विचार करें जो व्यक्तियों की पहचान के लिए उपप्रकार पूर्णांक स्थिरांक का प्रतिनिधित्व करता है। हम JSON स्ट्रिंग्स से स्वचालित रूपांतरण का समर्थन करने के लिए इस प्रकार की कार्यक्षमता का विस्तार करना चाहते हैं। इस प्रकार के लिए UnmarshalJSON को कार्यान्वित करना कठिन हो जाता है क्योंकि इसका उद्देश्य सीधे स्केलर मान को वापस करना या संशोधित करना है, जबकि UnmarshalJSON इसके संशोधन के लिए एक संरचना की अपेक्षा करता है।
इसे हल करने के लिए, हम एक पॉइंटर रिसीवर दृष्टिकोण अपनाते हैं। पॉइंटर रिसीवर का उपयोग करके, UnmarshalJSON विधि के भीतर किए गए परिवर्तन मूल मान पर प्रतिबिंबित होते हैं। यहां संशोधित UnmarshalJSON कार्यान्वयन का एक उदाहरण दिया गया है:
func (intValue *PersonID) UnmarshalJSON(data []byte) error { var s string if err := json.Unmarshal(data, &s); err != nil { return err } *intValue = Lookup(s) return nil }
इस कार्यान्वयन में, JSON टेक्स्ट को लुकअप फ़ंक्शन में पास करने से पहले एक स्ट्रिंग वेरिएबल में अनमर्शल किया जाता है, जो स्ट्रिंग को वांछित पर्सनआईडी मान में परिवर्तित करता है। यह मान तब पॉइंटर intValue को असाइन किया जाता है।
इसके अतिरिक्त, JSON टैग और JSON डेटा के बीच टकराव से बचने के लिए, सुनिश्चित करें कि MyType संरचना में टैग JSON में फ़ील्ड नामों से मेल खाते हैं। इन चरणों का पालन करके, आप व्युत्पन्न स्केलर प्रकारों के लिए UnmarshalJSON को सफलतापूर्वक कार्यान्वित कर सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3