में json.dumps() का उपयोग कर हेक्स स्ट्रिंग के रूप में पूर्णांक मुद्रित करने के लिए कैसे वर्तमान में मैं एक बड़े डेटा संरचना मुद्रित करने के लिएअजगर
print(json.dumps(data, indent=4))
निम्नलिखित कोड का उपयोग कर रहा मैं चाहते हैं कि सभी पूर्णांकों में मुद्रित करने के देखने के लिए दशमलव के बजाय हेक्स। क्या यह संभव है? ऐसा लगता है कि पूर्णांक के लिए मौजूदा एन्कोडर को ओवरराइड करने का कोई तरीका नहीं है। आप केवल JSONEncoder क्लास द्वारा पहले से प्रबंधित नहीं किए गए प्रकारों के लिए एक डिफ़ॉल्ट प्रदान कर सकते हैं, लेकिन यह पूर्णांक को एन्कोड करने के तरीके को ओवरराइड करने का कोई तरीका नहीं है।
मुझे लगा कि मैं sys.displayhook का उपयोग कर डिफ़ॉल्ट पूर्णांक मुद्रण व्यवहार को ओवरराइड कर सकता हूं यदि मैं कमांड लाइन में चल रहा था लेकिन मैं नहीं हूं।
बस संदर्भ के लिए डेटा संरचना डिक्ट्स, सूचियों, तारों, इंक आदि का मिश्रण बैग है इसलिए मैं json.dumps() के साथ गया था। ऐसा करने का एकमात्र अन्य तरीका यह है कि मैं इसे स्वयं पार्स करना चाहता हूं और फिर मैं जेसन मॉड्यूल को फिर से लिखूंगा।
अद्यतन: तो मैं कार्यों कि अभी सब पूर्णांक प्रकार हेक्स तार करने के लिए परिवर्तित के साथ मूल डेटा संरचना की एक प्रति प्रिंट serializing के साथ इसे लागू करने समाप्त हो गया:
def odprint(self, hexify=False):
"""pretty print the ordered dictionary"""
def hexify_list(data):
_data = []
for i,v in enumerate(data):
if isinstance(v, (int,long)):
_data.insert(i,hex(v))
elif isinstance(v,list):
_data.insert(i, hexify_list(v))
else:
_data.insert(i, val)
return _data
def hexify_dict(data):
_data = odict()
for k,v in data.items():
if isinstance(v, (dict,odict)):
_data[k] = hexify_dict(v)
elif isinstance(v, (int, long)):
_data[k] = hex(v)
elif isinstance(v,list):
_data[k] = hexify_list(v)
else:
_data[k] = v
return _data
if hexify:
print(json.dumps(hexify_dict(self), indent=4))
else:
print(json.dumps(self, indent=4))
मदद के लिए धन्यवाद। मुझे एहसास है कि मैं एक मानक निर्देश से नाराज हो जाता हूं, लेकिन प्रिंटिंग के लिए यह सिर्फ इतना है कि मुझे जो चाहिए वह ठीक है।
[जेएसओएन में ऑक्टल और हेक्स रूपों की अनुमति नहीं है] (http://tools.ietf.org/html/rfc4627#section-2.4) – jfs
नोट: आपका हेक्साइफ़ _ *() फ़ंक्शन डेटा खो सकता है। यदि आप इस सड़क पर जाते हैं तो आप [कुछ ऐसा] (http://ideone.com/G2DJG) – jfs
का उपयोग कर सकते हैं क्या आप समझा सकते हैं कि यह डेटा कैसे खो सकता है? – Plazgoth