আমার একটি পাইথন setরয়েছে যাতে সংগ্রহের মধ্যে কোনও নকলকে অন্তর্ভুক্ত করা না যায় সে জন্য নির্দিষ্ট পদার্থ __hash__এবং __eq__পদ্ধতি রয়েছে methods
আমি JSON সঙ্কেতাক্ষরে লিখা এই ফলাফলের প্রয়োজন 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অনুবাদগুলি অনুবাদ করার সীমাবদ্ধতাটি পেতে এখানে (এবং উন্নত) ব্যবহার করেছি তবে অভ্যন্তরীণ কীগুলিও এটি একটি সমস্যা are
এর মধ্যে থাকা setঅবজেক্টগুলি হ'ল জটিল অবজেক্ট যা অনুবাদ করে __dict__তবে তাদের নিজস্ব বৈশিষ্ট্যগুলির জন্য মানগুলি থাকতে পারে যা জসন এনকোডারটিতে মূল ধরণের জন্য অযোগ্য হতে পারে।
এটির মধ্যে বিভিন্ন ধরণের প্রচুর আগমন ঘটে এবং setহ্যাশটি মূলত সত্তার জন্য একটি অনন্য আইডি গণনা করে তবে নোএসকিউএল-এর সত্য আত্মায় সন্তানের অবজেক্টটি কী রয়েছে তা সঠিকভাবে বলতে পারে না।
একটি বস্তুর জন্য একটি তারিখের মান থাকতে পারে starts, অন্যদিকে কিছু অন্যান্য স্কিমা থাকতে পারে যার মধ্যে "অ-আদিম" অবজেক্টযুক্ত কোনও কী নেই।
সে কারণেই আমি কেবলমাত্র সমাধানটিই ভাবতে পারি যে বিভিন্ন কেস চালু JSONEncoderকরার defaultপদ্ধতিটি প্রতিস্থাপনের প্রসারকে বাড়ানো ছিল - তবে আমি কীভাবে এই বিষয়ে যেতে হবে তা নিশ্চিত নই এবং ডকুমেন্টেশন দ্বিপাক্ষিক is নেস্টেড অবজেক্টগুলিতে, defaultকীটি কী দ্বারা ফিরে আসা থেকে ফিরে আসে , বা এটি কেবল একটি জেনেরিককে অন্তর্ভুক্ত / বাতিল করে দেয় যা পুরো অবজেক্টকে দেখায়? কীভাবে সেই পদ্ধতিতে নেস্টেড মানগুলি সমন্বিত হয়? আমি পূর্ববর্তী প্রশ্নগুলি দেখেছি এবং কেস-নির্দিষ্ট এনকোডিংয়ের জন্য সর্বোত্তম পদ্ধতির সন্ধান করতে পারে না (যা দুর্ভাগ্যবশত মনে হয় যে এখানে আমার কী করা দরকার)।
dict? আমি মনে করি আপনিlistসেট থেকে কিছুটা দূরে তৈরি করতে চান এবং তারপরে এটি এনকোডারকে দিয়ে দিতে চান ... যেমন:encode(list(myset))