[英]How do I use an Avro schema to validate JSON?
我想知道使用Avro架構驗證進入我的應用程序的JSON的可行性。 在這篇文章 ,道格切割建議使用jsontofrag
自帶的Avro的工具jar工具。 他的例子是一個簡單的JSON“文檔”,它只是一個數字:
echo 2 | java -jar avro-tools.jar jsontofrag '"int"' - | java -jar avro-tools.jar fragtojson '"int"' -
雖然這有效,但我想知道如何使用更有趣的JSON文檔。
當我在Avro網站上使用示例JSON doc和schema嘗試此操作時,它會失敗,如下所示:
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 doc
{"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的另一種方法?
jsontofrag工具的用法(和回溯)還有很多不足之處; “schema”的含義是文字架構字符串,而不是包含架構的文件名。 (驚喜!)以下對你命令的調整對我有用:
cat user.json | java -jar avro-tools.jar jsontofrag "`cat user.avsc`" - | java -jar avro-tools.jar fragtojson "`cat user.avsc`" -
在這里,我使用舊式的背景來進行命令替換; 較新的“$(cat user.avsc)”語法也適用於bash,也可能適用於其他現代(ish)shell。
fromjson
是fromjson
的替代jsontofrag
,可能更簡單,更直接。
java -jar avro-tools.jar fromjson --schema-file user.avsc user.json > user.avro
如果JSON無效,則會拋出異常,因此可以使用它來驗證JSON。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.