मेरे पास एक पायथन set
है जिसमें कुछ डुप्लिकेट्स को संग्रह में शामिल करने के लिए ऑब्जेक्ट्स __hash__
और __eq__
तरीके शामिल हैं।
मैं इस परिणाम को सांकेतिक शब्दों में बदलना करने की जरूरत है set
, लेकिन विधि के set
लिए एक खाली भी गुजर एक json.dumps
उठाता है TypeError
।
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 178, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: set([]) is not JSON serializable
मुझे पता है कि मैं उस json.JSONEncoder
वर्ग के लिए एक एक्सटेंशन बना सकता हूं जिसमें एक कस्टम default
विधि है, लेकिन मुझे यह भी सुनिश्चित नहीं है कि कहां से परिवर्तित करने के लिए शुरू करना है set
। क्या मुझे set
डिफ़ॉल्ट विधि के भीतर मानों से एक शब्दकोश बनाना चाहिए , और फिर उस पर एन्कोडिंग वापस करना चाहिए? आदर्श रूप में, मैं डिफ़ॉल्ट विधि को सभी डेटाटिप्स को संभालने में सक्षम करना चाहता हूं जो कि मूल एनकोडर पर चोक करता है (मैं एक डेटा स्रोत के रूप में मैंगो का उपयोग कर रहा हूं, इसलिए तारीखें इस त्रुटि को भी बढ़ाती प्रतीत होती हैं)
सही दिशा में किसी भी संकेत की सराहना की जाएगी।
संपादित करें:
जवाब के लिए धन्यवाद! शायद मुझे और सटीक होना चाहिए था।
मैंने set
अनुवादित होने की सीमाओं के आसपास पाने के लिए यहां (और उत्कीर्ण) उत्तरों का उपयोग किया , लेकिन आंतरिक कुंजी भी हैं जो एक मुद्दा भी हैं।
जिन वस्तुओं में set
जटिल वस्तुएं हैं __dict__
, वे अनुवाद करते हैं , लेकिन वे स्वयं भी अपने गुणों के लिए मान शामिल कर सकते हैं जो कि json एनकोडर में मूल प्रकारों के लिए अयोग्य हो सकते हैं।
इसमें बहुत सारे अलग-अलग प्रकार आ रहे हैं set
, और हैश मूल रूप से इकाई के लिए एक अद्वितीय आईडी की गणना करता है, लेकिन NoSQL की सच्ची भावना में यह नहीं बता रहा है कि वास्तव में बच्चे की वस्तु क्या है।
एक ऑब्जेक्ट में एक दिनांक मान starts
हो सकता है, जबकि दूसरे में कुछ अन्य स्कीमा हो सकती हैं जिसमें "गैर-आदिम" ऑब्जेक्ट वाली कोई कुंजी शामिल नहीं है।
यही कारण है कि एकमात्र उपाय जिसके बारे में मैं सोच सकता था, वह यह था कि अलग-अलग मामलों को चालू करने के JSONEncoder
लिए default
विधि को बदलने के लिए - लेकिन मुझे यकीन नहीं है कि इस बारे में कैसे जाना जाए और दस्तावेज अस्पष्ट है। नेस्टेड ऑब्जेक्ट्स में, मान default
कुंजी से जाने से वापस आता है , या क्या यह केवल एक जेनेरिक शामिल है / पूरी वस्तु को देखता है? यह विधि नेस्टेड मूल्यों को कैसे समायोजित करती है? मैंने पिछले प्रश्नों के माध्यम से देखा है और केस-विशिष्ट एन्कोडिंग के लिए सबसे अच्छा तरीका खोजने के लिए प्रतीत नहीं हो सकता है (जो दुर्भाग्य से ऐसा लगता है कि मैं यहां क्या करने जा रहा हूं)।
dict
? मुझे लगता है कि आपlist
सेट से सिर्फ एक आउट करना चाहते हैं और फिर इसे एनकोडर में पास करना चाहते हैं ... उदाहरण के लिए:encode(list(myset))