簡體   English   中英

如何使用Avro架構驗證JSON?

[英]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。

fromjsonfromjson的替代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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM