首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将json对象反序列化为Faust记录,其中json在键名中有连字符

将json对象反序列化为Faust记录,其中json在键名中有连字符
EN

Stack Overflow用户
提问于 2020-06-25 01:08:23
回答 1查看 321关注 0票数 1

我有一个JSON对象,它看起来像

代码语言:javascript
复制
{ 
  "timestamp": "2020-06-24T15:32:56.775518Z",
  "record-type": "data",
  "operation": "load",
  "partition-key-type": "primary-key",
  "schema-name": "legacy",
  "table-name": "test"
}

我试着把这些记录反序列化成

代码语言:javascript
复制
class MetadataModel(faust.Record):
    timestamp: str
    record-type: str  # does not work, hyphens in name not allowed
    schema_name: str  # does not work
    tableName: str    # does not work 

我可能遗漏了一些简单的东西,但是如何从键中有连字符的json对象转到python对象呢?任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-05 18:03:56

您可以使用faust.models.fields中的字段类在JSON中提供自定义名称。

代码语言:javascript
复制
import faust
from faust.models.fields import StringField


class MetadataModel(faust.Record):
    timestamp: str
    record_type: str = StringField(input_name='record-type')
    operation: str
    partition_key_type: str = StringField(input_name='partition-key-type')
    schema_name: str = StringField(input_name='schema-name')
    table_name: str = StringField(input_name='table-name')


json_bytes = b"""
    { 
      "timestamp": "2020-06-24T15:32:56.775518Z",
      "record-type": "data",
      "operation": "load",
      "partition-key-type": "primary-key",
      "schema-name": "legacy",
      "table-name": "test"
    }
"""

print(MetadataModel.loads(json_bytes, default_serializer='json'))

输出:

代码语言:javascript
复制
<MetadataModel: timestamp='2020-06-24T15:32:56.775518Z', record_type='data', operation='load', partition_key_type='primary-key', schema_name='legacy', table_name='test'>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62560484

复制
相关文章

相似问题

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