मेमोरी में लोड किए बिना JSON में बड़े डेटा स्ट्रीम को मार्शल करना
बड़े डेटा स्ट्रीम को JSON में एनकोड करने की आवश्यकता अक्सर उत्पन्न होती है, लेकिन संपूर्ण लोड करना एक बार में स्मृति में स्ट्रीम करना अव्यावहारिक हो सकता है। यह आलेख अंतर्निहित json.Marshaler इंटरफ़ेस के बिना इस चुनौती को दूर करने के तरीकों की खोज करता है।
json.Encoder के साथ एन्कोडिंग: एक सीमा
एक बड़ी स्ट्रीम को एन्कोड करने का प्रयास मेमोरी में चैनल (चान स्ट्रिंग) को संभालने में असमर्थता के कारण json.Encoder के साथ डेटा विफल हो जाएगा।
कस्टम JSON एन्कोडिंग
एक उपयुक्त बिल्ट के अभाव में -समाधान में, कस्टम JSON एन्कोडिंग आवश्यक हो जाती है। इसमें JSON स्ट्रिंग को मैन्युअल रूप से बनाना शामिल है, जैसा कि नीचे दिए गए स्निपेट में दिखाया गया है:
w := os.Stdout w.WriteString(`{ "Foo": "` t.Foo `", "Bar": [`) for x := range t.Bar { _ = json.NewEncoder(w).Encode(x) w.WriteString(`,`) } w.WriteString(`]}`)
चैनल समर्थन के लिए एन्कोडिंग/जेसन का विस्तार
चैनल समर्थन के साथ एन्कोडिंग/जेसन पैकेज को बढ़ाने के लिए, आप reformValueQuoted को संशोधित कर सकते हैं एन्कोडिंग/json/encode.go में कार्य करें। विशेष रूप से, निम्नलिखित के समान चैनलों के लिए एक केस जोड़ें:
case reflect.Chan: e.WriteByte('[') i := 0 for { x, ok := v.Recv() if !ok { break } if i > 0 { e.WriteByte(',') } e.reflectValue(x) i } e.WriteByte(']')
निष्कर्ष
हालांकि एन्कोडिंग/जेसन पैकेज वर्तमान में चैनल एन्कोडिंग का समर्थन नहीं करता है, यह आलेख बड़े डेटा स्ट्रीम को मार्शल करने के लिए वैकल्पिक दृष्टिकोण प्रदान करता है JSON में कुशलतापूर्वक। कस्टम एन्कोडिंग डेटा को सीधे JSON आउटपुट में स्ट्रीम करने की अनुमति देता है, जबकि एन्कोडिंग/json का विस्तार अधिक मजबूत समाधान प्रदान करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3