首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用JSON将JSON字符串反序列化为嵌套对象

使用JSON将JSON字符串反序列化为嵌套对象
EN

Stack Overflow用户
提问于 2019-04-23 00:07:52
回答 2查看 847关注 0票数 0

我正在尝试使用jsons将json字符串反序列化为对象,但嵌套对象有问题,但无法解决语法问题。

例如,下面的代码试图将数据结构定义为一系列数据类,但未能反序列化嵌套对象C和D?语法显然是错误的,但我不清楚它应该如何构造

代码语言:javascript
复制
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反序列化对象的正确方法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-05-28 17:25:48

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2019-04-23 02:50:46

我终于设法通过删除dataClass定义并扩展旧的类定义来实现这一点……代码如下...

代码语言:javascript
复制
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定义构建原始帖子,我将不胜感激。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55797363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档