在 Avro 架构中定义可空列表时遇到问题 - Pub/Sub Google Cloud

问题描述 投票:0回答:1

我在使用 Avro schema 验证和消息测试时遇到了令人费解的问题,特别是在 Google Cloud Pub/Sub schema 中。在我的架构中,我定义了可以为空的自定义对象列表。

但是,当我尝试验证这样的示例 JSON 消息时:

{
  "nullable_list": [
    {"field1": 10, "field2": "example1"},
    {"field1": 20, "field2": "example2"}
  ]
}

我收到错误消息:“根据架构,该消息无效。”

令人惊讶的是,如果我提供这样的 JSON 消息:

{ "nullable_list": null }
它表示:“

根据模式,消息是有效的。

这是我的架构:

{ "type": "record", "name": "MyRecord", "fields": [ { "name": "nullable_list", "type": [ "null", { "type": "array", "items": { "type": "record", "name": "MyObject", "fields": [ {"name": "field1", "type": "int"}, {"name": "field2", "type": "string"} ] } } ], "default": null } ] }
有人可以解释为什么会发生这种情况吗?

arrays json schema avro google-cloud-pubsub
1个回答
0
投票
来自

Avro JSON 编码规范

联合的值在 JSON 中编码如下:

    如果其类型为 null,则将其编码为 JSON null;
  • 否则它会被编码为一个 JSON 对象,具有一个名称/值对,其名称是类型的名称,其值是递归的 编码值。对于 Avro 的命名类型(记录、固定或枚举) 使用用户指定的名称,对于其他类型,使用类型名称。
因此,该消息的正确 JSON 表示形式为:

{ "nullable_list": { "array": [ { "field1": 10, "field2": "example1" }, { "field1": 20, "field2": "example2" } ] } }
    
© www.soinside.com 2019 - 2024. All rights reserved.