无法使用 Python 和 Marshmallow 解析复杂的 JSON

发布于 2025-01-10 23:01:55 字数 1414 浏览 1 评论 0原文

我正在使用 Marshmallow 为 JSON 文件创建映射器。以下是详细信息:

我的 JSON 文件:

{
    "version": "3.0",
    "name": "A1",
    "request": {
        "startdate": "26022022",
        "enddate": "26022022",
        "records": 1000
    },
    "ranking": {
        "90": {
            "name": "N1",
            "class1": "C1"
        },
        "98": {
            "name": "N2",
            "class1": "C2"
        },
        "86": {
            "name": "N3",
            "class1": "C3"
        }
    }
}

我的映射器类:

class RequestMapper(Schema):
    startdate = fields.String()
    enddate = fields.String()
    records = fields.Int()

class Ranking(Schema):
    name = fields.String()
    class1 = fields.String()

class RankingMapper(Schema):
    rank = fields.Nested(Ranking(), dataKey = fields.Int)

class SampleSchema(Schema):
    name = fields.Str()
    request = fields.Nested(RequestMapper())
    ranking = fields.Nested(RankingMapper())

调用映射器的代码:

        print("\n\nOutput using mapper")
        pprint(mapper.SampleSchema().dump(data), indent=3)
        print("\n\n")

以下是输出:

Output using mapper
{  'name': 'A1',
   'ranking': {},
   'request': {'enddate': '26022022', 'records': 1000, 'startdate': '26022022'}}

我没有获得任何用于排名的数据,因为数据键 [90, 98, 86...] 是动态的,并且不确定如何请为动态键创建映射器。

任何输入都会有帮助。

谢谢

I am using Marshmallow to create a mapper for a JSON file. Following are the details:

My JSON File:

{
    "version": "3.0",
    "name": "A1",
    "request": {
        "startdate": "26022022",
        "enddate": "26022022",
        "records": 1000
    },
    "ranking": {
        "90": {
            "name": "N1",
            "class1": "C1"
        },
        "98": {
            "name": "N2",
            "class1": "C2"
        },
        "86": {
            "name": "N3",
            "class1": "C3"
        }
    }
}

My mapper class:

class RequestMapper(Schema):
    startdate = fields.String()
    enddate = fields.String()
    records = fields.Int()

class Ranking(Schema):
    name = fields.String()
    class1 = fields.String()

class RankingMapper(Schema):
    rank = fields.Nested(Ranking(), dataKey = fields.Int)

class SampleSchema(Schema):
    name = fields.Str()
    request = fields.Nested(RequestMapper())
    ranking = fields.Nested(RankingMapper())

Code to call Mapper:

        print("\n\nOutput using mapper")
        pprint(mapper.SampleSchema().dump(data), indent=3)
        print("\n\n")

Following is the output:

Output using mapper
{  'name': 'A1',
   'ranking': {},
   'request': {'enddate': '26022022', 'records': 1000, 'startdate': '26022022'}}

I am not getting any data for ranking as datakey [90, 98, 86...] are dynamic and am not sure how to create mapper for dynamic keys please.

Any inputs will be helpful.

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

木落 2025-01-17 23:01:55

嵌套模式时,传递类名称,而不是类实例:


class RankingMapper(Schema):
    rank = fields.Nested(Ranking, dataKey = fields.Int)

class SampleSchema(Schema):
    name = fields.Str()
    request = fields.Nested(RequestMapper)
    ranking = fields.Nested(RankingMapper)

When nesting schemas, pass the class NAME, not a class instance:


class RankingMapper(Schema):
    rank = fields.Nested(Ranking, dataKey = fields.Int)

class SampleSchema(Schema):
    name = fields.Str()
    request = fields.Nested(RequestMapper)
    ranking = fields.Nested(RankingMapper)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文