2017-11-15 26 views
5

के बिना struct.unpack से json में डेटा लिखना मेरे पास एक बड़ी वस्तु है जो struct.unpack का उपयोग करके बाइनरी फ़ाइल से पढ़ी जाती है और कुछ मान वर्ण सरणी हैं जिन्हें बाइट्स के रूप में पढ़ा जाता है।पायथन 3 - व्यक्तिगत रीस्टस्टिंग

चूंकि पाइथन 3 में वर्ण सरणी स्ट्रिंग के बजाए बाइट्स के रूप में पढ़ी जाती हैं (जैसे पायथन 2) उन्हें सीधे "बाइट्स" जेएसओएन क्रमबद्ध नहीं होने के कारण json.dumps पर पास नहीं किया जा सकता है।

क्या अनपॅक किए गए स्ट्रक्चर से जेसन तक प्रत्येक मूल्य के माध्यम से खोज किए बिना और बाइट्स को तारों में परिवर्तित करने का कोई तरीका है?

+0

देखें तो कैसे बाइनरी डेटा JSON में प्रतिनिधित्व किया जाएगा? यह एक प्रतिनिधित्व मुद्दे के रूप में एक पायथन समस्या इतनी ज्यादा नहीं है। क्या बाइनरी डेटा को बेस 64 में परिवर्तित किया जाना चाहिए? लैटिन -1 के रूप में डीकोड किया जाना चाहिए? आपको अभी भी एक वैध डेटा संरचना की ओर बढ़ना है जिसे प्रदर्शित किया जा सकता है। –

उत्तर

6

आप इस मामले में एक कस्टम एन्कोडर का उपयोग कर सकते हैं। नीचे

import json 

x = {} 
x['bytes'] = [b"i am bytes", "test"] 
x['string'] = "strings" 
x['unicode'] = u"unicode string" 


class MyEncoder(json.JSONEncoder): 
    def default(self, o): 
     if type(o) is bytes: 
      return o.decode("utf-8") 
     return super(MyEncoder, self).default(o) 


print(json.dumps(x, cls=MyEncoder)) 
# {"bytes": ["i am bytes", "test"], "string": "strings", "unicode": "unicode string"} 
+0

बिल्कुल सही, बिल्कुल मैं क्या देख रहा था! – dexgecko