我正在使用这个 Avro 模式:
价格状态.avsc
{
"namespace": "com.company.model",
"name": "Product",
"type": "record",
"fields": [
{
"name": "product_id",
"type": "string"
},
{
"name": "sale_prices",
"type": {
"name": "sale_prices",
"type": "record",
"fields": [
{
"name": "default",
"type": {
"name": "default",
"type": "record",
"fields": [
{
"name": "order_by_item_price_by_item",
"type": [
"null",
{
"name": "markup_strategy",
"type": "record",
"fields": [
{
"name": "type",
"type": {
"name": "type",
"type": "enum",
"symbols": ["margin", "sale_price"]
}
}
]
}
]
},
{"name": "order_by_item_price_by_weight", "type": ["null", "string"]},
{"name": "order_by_weight_price_by_weight", "type": ["null", "string"]}
]
}
}
]
}
}
]
}
它在这个网站上正确验证,所以我假设架构是有效的。
我在构建 JSON 文件时遇到问题,然后应该使用上述模式对其进行编码。
我正在使用这个 JSON 进行一些测试:
测试.json
{
"product_id": "123",
"sale_prices": {
"default": {
"order_by_item_price_by_item": {
"markup_strategy": {
"type": {"enum": "margin"}
}
},
"order_by_item_price_by_weight": null,
"order_by_weight_price_by_weight": null
}
}
}
跑步时java -jar avro-tools-1.8.2.jar fromjson --schema-file prices-state.avsc test.json
我得到:
线程“主”org.apache.avro.AvroTypeException 中的异常:未知联合分支 markup_strategy
我在这里读到,由于 JSON 编码,我必须将东西包装在 union 中,所以我尝试了不同的组合,但似乎没有一个有效。