का उपयोग कर रहा है एक फाइल करने के लिए एक अजगर वस्तु लेखन jsonpickle प्रयोग करने के लिए निम्नलिखित सरल तरीके:बचत और लदान वस्तुओं jsonpickle
def json_serialize(obj, filename, use_jsonpickle=True):
f = open(filename, 'w')
if use_jsonpickle:
import jsonpickle
json_obj = jsonpickle.encode(obj)
f.write(json_obj)
else:
simplejson.dump(obj, f)
f.close()
def json_load_file(filename, use_jsonpickle=True):
f = open(filename)
if use_jsonpickle:
import jsonpickle
json_str = f.read()
obj = jsonpickle.decode(json_str)
else:
obj = simplejson.load(f)
return obj
समस्या यह है कि जब भी मैं इन का उपयोग करें, इसे वापस मेरी वस्तुओं को लोड करता है के रूप में है शब्दकोश (जिसमें फ़ील्ड हैं: "py/object": "my_module.MyClassName") लेकिन जेसन स्ट्रिंग उत्पन्न करने के लिए उपयोग किए जाने वाले प्रकार के वास्तविक पायथन ऑब्जेक्ट के रूप में नहीं। मैं इसे कैसे बना सकता हूं ताकि jsonpickle वास्तव में लोड की गई स्ट्रिंग को वापस ऑब्जेक्ट में परिवर्तित कर सके?
एक उदाहरण के साथ इस वर्णन करने के लिए, निम्नलिखित पर विचार:
class Foo:
def __init__(self, hello):
self.hello = hello
# make a Foo obj
obj = Foo("hello world")
obj_str = jsonpickle.encode(obj)
restored_obj = jsonpickle.decode(obj_str)
list_objects = [restored_obj]
# We now get a list with a dictionary, rather than
# a list containing a Foo object
print "list_objects: ", list_objects
यह पैदावार:
list_objects: [{'py/object': 'as_events.Foo', 'hello': 'hello world'}]
के बजाय की तरह कुछ: [फू()]। मैं इसे कैसे ठीक करूं?
धन्यवाद।
क्या आप 'jsonpickle.decode()' लाइन से पहले 'as_events' आयात कर सकते हैं? – jfs
FWIW यह एक महान उदाहरण है जब आपको फ़ाइल लेखन के लिए 'खुला()' संदर्भ प्रबंधक के साथ 'उपयोग करना चाहिए। जब आप यहां क्रमबद्ध त्रुटियों में भाग लेते हैं तो आप अपनी फाइलें खोल देंगे - यह बुरा है। – BoltzmannBrain