我想知道使用 Avro 模式来验证进入我的应用程序的 JSON 的可行性。在这篇文章中,Doug Cutting 建议使用jsontofrag
avro-tools jar 附带的工具。他的示例是一个简单的 JSON“文档”,它只是一个数字:
echo 2 | java -jar avro-tools.jar jsontofrag '"int"' - | java -jar avro-tools.jar fragtojson '"int"' -
虽然这可行,但我想知道如何使用更有趣的 JSON 文档来做到这一点。
当我在 Avro 网站上使用示例 JSON 文档和模式尝试此操作时,它失败了,如下所示:
Avro 架构:
{"namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
示例 JSON 文档
{"name": "Ben",
"favorite_number": 7,
"favorite_color": "red"}
但是当我尝试这样做时:
cat user.json | java -jar avro-tools.jar jsontofrag user.avsc - | java -jar avro-tools.jar fragtojson user.avsc -
它得到这个错误(堆栈跟踪省略):
Exception in thread "main" org.apache.avro.SchemaParseException: org.codehaus.jackson.JsonParseException:
Unexpected character ('u' (code 117)):
expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: java.io.StringReader@74dca977; line: 1, column: 2]
关于如何使这项工作的任何想法?或者另一种使用 Avro 模式来验证 JSON 的方法?