首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何指定名称以数字开头的python faust.Record字段?

如何指定名称以数字开头的python faust.Record字段?
EN

Stack Overflow用户
提问于 2021-04-25 08:16:13
回答 1查看 117关注 0票数 0

我通过扩展faust.Record类来描述浮士德模型。我的输入json如下所示:

代码语言:javascript
复制
{
  "1": "some_string"
  "2": "some_string"
}

因此,我必须创建类字段,仅使用数字命名。我知道,它通常限制在Python中,但是有什么解决方法吗,比如我的字段名称的别名?

我正在寻找Java中类似Jackson注解的东西:

代码语言:javascript
复制
import faust

class Model(faust.Record, serializer='json'):
    @alias(field_name: '1')
    first_name: str
    @alias(field_name: '2')
    last_name: str
EN

回答 1

Stack Overflow用户

发布于 2021-04-26 21:49:30

如果没有合适的数据模型,没有简单的方法可以神奇地挽救一个主题。

在没有数据模型的情况下,您永远不应该编写主题。

正如@OneCricketeer建议的那样,你应该将未定义的主题作为字典来摄取。

之后,您可以编写一个使用此主题的代理,将您的模型转换为适当的数据模型,并将其写入主题。

代码语言:javascript
复制
class Person(faust.Record):
    first_name: str
    last_name: str

现在你可以像预期的那样开始使用你的Person模型。

代码语言:javascript
复制
undeclared_json_topic = app.topic('name_of_your_input_topic')
person_topic = app.topic('person', value_type=Person)

@app.agent(undeclared_json_topic)
async def migrate_to_person(json_stream: faust.Stream) -> faust.Stream[Person]:
    async for json in json_stream:
        person = Person(first_name=json['1'], last_name=json['2'])
        await person_topic.send(value=person)
        yield
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67248607

复制
相关文章

相似问题

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