Моя классовая структура выглядит следующим образом -Невозможно декодировать JSON строку в объект питона с помощью jsonpickle
class HelloWorld (object):
def __init__(self, name, i, id):
self.name = name
self.i = i
self.id = id
Я создаю объект
p = HelloWorld('pj', 3456, '1234')
и передачи этого объекта в определении , где я использую jsonpickle.encode
и jsonpickle.decode
следующего
>>>print(type(p))
<class 'HelloWorld'>
>>>x = jsonpickle.encode(p)
>>>print(x)
{"i": 3456, "name": "pj", "py/object": "__builtin__.HelloWorld", "id": "1234"}
>>>y = jsonpickle.decode(x)
>>>print(type(y))
<class 'dict'>
Я не понимаю, почему я неспособный декодировать его обратно к исходному объекту, несмотря на то, что также присутствует отличительный py/object
.
Может кто-нибудь предложить, что я делаю неправильно?
Добавление кода, генерирующего динамический класс для вышеупомянутого прецедента.
def _create_pojo(self, pojo_class_name, param_schema):
#extracting the properties from the parameter 'schema'
pojo_properties = param_schema['properties']
#creating a list of property keys
pojo_property_list = []
for key in pojo_properties:
pojo_property_list.append(key)
source = \
"class %s (object):\n" % (pojo_class_name)
source += " def __init__(self, %s" % ', '.join(pojo_property_list) +"):\n" #defining __init__ for the class
for prop in pojo_property_list: #creating a variable in the __init__ method for each property in the property list
source += " self.%s = %s\n" % (prop, prop)
#generating the class code
class_code = compile(source, "<generated class>", "exec")
fakeglobals = {}
eval(class_code, {"object" : object}, fakeglobals)
result = fakeglobals[ pojo_class_name ]
result ._source = source
pprint.pprint(source)
self._object_types[ pojo_class_name ] = result
return result
Выполняете ли вы все это в интерактивной консоли или «HelloWorld» импортируется из файла? –
Я пробовал это на python 2.7.7, и он работает нормально, используя код, который вы опубликовали. Вы можете проверить, с какой версией python вы работаете? возможно, это и есть причина. –
Я не могу воспроизвести вашу проблему. –