我正在编写我的第一个Avro模式,它使用JSON作为模式语言。我知道你不能在普通的JSON中加入注释,但是我想知道Avro工具是否允许注释。例如,它是否会在解析JSON之前删除它们(就像预处理器一样)。
编辑:我正在使用C ++ Avro工具链。
是的,但它有限制。在架构中,Avro数据类型'record','enum'和'fixed'允许包含一个包含任意文档字符串的'doc'字段。例如:
{"type": "record", "name": "test.Weather",
"doc": "A weather reading.",
"fields": [
{"name": "station", "type": "string", "order": "ignore"},
{"name": "time", "type": "long"},
{"name": "temp", "type": "int"}
]
}
根据官方的Avro规范:
doc: 一个JSON字符串,可选地提供此模式的用户文档。
https://avro.apache.org/docs/current/spec.html#schema_record
是的,您可以在Avro JSON模式中使用C注释:/* something */ 或 // something
Avro工具在解析过程中忽略这些表达式。
编辑:仅适用于Java API。
1.9.2
)Avro规范,允许将未定义的额外属性作为元数据添加:
这样可以让你添加类似这样的注释:{
"type": "record",
"name": "test",
"comment": "This is a comment",
"//": "This is also a comment",
"TODO": "As per this comment we should remember to fix this schema" ,
"fields" : [
{
"name": "a", "type": "long"
},
{
"name": "b", "type": "string"
}
]
}
不,目前C++和C#版本(截至1.7.5)都不能实现。如果你看一下代码,他们只是将JSON直接塞入JSON解析器,没有进行任何注释预处理 - 这种编程风格十分奇怪。文档和语言支持似乎也比较松散...