【发布时间】:2013-05-03 01:53:09
【问题描述】:
我想知道使用 Avro 架构来验证进入我的应用程序的 JSON 的可行性。在this post 中,Doug Cutting 建议使用 avro-tools jar 附带的jsontofrag 工具。他的示例是一个简单的 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 的另一种方式?
【问题讨论】:
标签: json validation avro