我正在尝试使用jsons将json字符串反序列化为对象,但嵌套对象有问题,但无法解决语法问题。
例如,下面的代码试图将数据结构定义为一系列数据类,但未能反序列化嵌套对象C和D?语法显然是错误的,但我不清楚它应该如何构造
import jsons
from dataclasses import dataclass
@dataclass
class D:
E: str
class C:
id: int
name:str
@dataclass
class test:
A: str
B: int
C: C()
D: D()
jsonString = {"A":"a","B":1,"C":[{"id":1,"name":"one"},{"id":2,"name":"two"}],"D":[{"E":"e"}]}
instance = jsons.load(jsonString, test)
有人能指出从json反序列化对象的正确方法吗?
发布于 2020-05-28 17:25:48
from dataclasses import dataclass
from typing import List
from validated_dc import ValidatedDC
@dataclass
class D(ValidatedDC):
E: str
@dataclass
class C(ValidatedDC):
id: int
name: str
@dataclass
class Test(ValidatedDC):
A: str
B: int
C: List[C]
D: List[D]
jsonString = {
"A": "a",
"B": 1,
"C": [{"id": 1, "name": "one"}, {"id": 2, "name": "two"}],
"D": [{"E": "e"}]
}
instance = Test(**jsonString)
assert instance.C == [C(id=1, name='one'), C(id=2, name='two')]
assert instance.C[0].id == 1
assert instance.C[1].name == 'two'
assert instance.D == [D(E='e')]
assert instance.D[0].E == 'e'
ValidatedDC:https://github.com/EvgeniyBurdin/validated_dc
发布于 2019-04-23 02:50:46
我终于设法通过删除dataClass
定义并扩展旧的类定义来实现这一点……代码如下...
import jsons
class D:
def __init__(self, E = ""):
self.E = E
class C:
def __init__(self, id = 0, name=""):
self.id = id
self.name = name
class test:
def __init__(self, A = "", B = 0, C = C(), D = D()):
self.A = A
self.B = B
self.C = C
self.D = D
jsonString = {"A":"a","B":1,"C":[{"id":1,"name":"one"},{"id":2,"name":"two"}],"D":[{"E":"e"}]}
instance = jsons.load(jsonString, test)
它现在可以工作了,但不像dataClass
那样干净。如果有人能指出如何使用dataClass
定义构建原始帖子,我将不胜感激。
https://stackoverflow.com/questions/55797363
复制相似问题