我想知道使用Avro模式来验证应用程序中附带的JSON的可行性。在this post中,Doug Cutting建议使用avro-tools jar附带的jsontofrag
工具。他的例子是JSON“文件”,这只是一些微不足道的一个:如何使用Avro模式来验证JSON?
echo 2 | java -jar avro-tools.jar jsontofrag '"int"' - | java -jar avro-tools.jar fragtojson '"int"' -
虽然这工作,我想知道如何与一个更有趣的JSON文档做到这一点。
当我尝试这与示例JSON文档和架构的Avro公司网站失败了,像这样的:
的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: [email protected]; line: 1, column: 2]
如何使这项工作任何想法?或者使用Avro模式来验证JSON的另一种方法?
感谢您澄清混淆语法。我也发现这可以通过使用“fromjson”命令来完成avro jar工具 - 我已经添加了这个答案。 – quux00 2013-08-24 20:01:43