我有一个发烧的模型如下。
from pydantic import Json, BaseModel
class Foo(BaseModel):
id: int
bar: Json
Foo.bar可以将JSON字符串解析为输入,并将其存储为dict,这很好。
foo = Foo(id=1, bar='{"foo": 2, "bar": 3}')
type(foo.bar) #outputs dict
如果我想让整个对象成为一个dict
,我可以这样做
foo.dict()
#outputs
{'id': 1, 'bar': {'foo': 2, 'bar': 3}}
但是如何将bar
导出为JSON字符串,如下所示
{'id': 1, 'bar': '{"foo": 2, "bar": 3}'}
我想把JSON写回数据库.
发布于 2021-05-28 08:27:18
这是毕丹派的作者。
目前,如果不调用json.dumps(foo.bar)
,就无法做到这一点。如果您愿意,可以在Foo
上将其作为一个方法,这将更容易使用,但需要相同的处理。
如果性能非常关键,或者需要完全相同的JSON字符串(相同的空格等)。您可以执行以下操作之一:
bar
成为一个字符串字段,但是添加了一个验证器来检查它的有效性JSON 的引用
发布于 2021-05-28 08:17:49
要将嵌套转换为字符串吗?
x = {'id': 1, 'bar': str({'foo': 2, 'bar': 3})}
给出
{'id': 1, 'bar': "{'foo': 2, 'bar': 3}"}
发布于 2021-06-09 15:27:55
解决方案中问题的解决方法是继承BaseModel并重写dict
方法。
class ExtendedModel(BaseModel):
def dict(self, json_as_string=False, **kwargs) -> dict:
__dict = super().dict(**kwargs)
if json_as_string:
for field, _ in self.schema()['properties'].items():
if _.get('format') == 'json-string' and field in __dict :
__dict[field] = json.dumps(getattr(self, field))
return __dict
self.__field__
不会指定字段的类型是否实际上是Json。它正像其他人一样回归。所以我用了这个方法。
https://stackoverflow.com/questions/67735198
复制相似问题