Колба Зефир поля JSON - PullRequest
       24

Колба Зефир поля JSON

0 голосов
/ 31 марта 2019

Я определил POST-вызов, для которого нужны данные:

{
    "one" : "hello",
    "two" : "world",
    "three" : { 
                "abc": "123", 
                "def": false 
              }
}

Для этого я могу определить one и two, но не уверен, какое право было определить three.Как я могу указать поле JSON во Flask.Я могу определить основные поля, такие как:

from marshmallow import Schema, post_load, fields

class Foo(object):
    def __init__(self, one, two=None):
        self.one = one
        self.two = two

class MySchema(Schema):
    one = fields.String(required=True)
    two = fields.String()

    @post_load
    def create_foo(self, data):
        return Foo(**data)

Как мне определить three в MySchema?Должен ли я:

  1. просто поместить его как строку и выполнить манипуляции, чтобы загрузить его как json, используя json.loads()/json.dumps()?Или есть способ определить его правильно?
  2. определить его как fields.Dict?
  3. Могу ли я определить отдельное Schema для этого поля
  4. , если мне нужно расширитьfield.Field?

Я смотрю на https://marshmallow.readthedocs.io/en/3.0/api_reference.html,, но все еще не уверен.Подполе JSON или вложенный JSON кажется обычным вариантом использования, но я не могу найти что-либо подходящее по этому вопросу.Любая помощь приветствуется!

1 Ответ

2 голосов
/ 31 марта 2019

Это можно сделать с помощью вложенных схем: https://marshmallow.readthedocs.io/en/3.0/nesting.html

Ваша схема будет выглядеть примерно так:

class MySchema(Schema):
    one = fields.String(required=True)
    two = fields.String()
    three = fields.Nested(ThreeSchema)

class ThreeSchema(Schema):
    abc = fields.String()
    def = fields.Boolean()
...