[英]Convert Json to Avro schema
我想將像下面這樣的普通 Json 文件轉換為 avro 模式,以使其在具有融合模式注冊表的 apache kafka 中工作。
輸入 (Json)
[
{
"name": "Robin Hood",
"department": "",
"manager": "",
"salary": 200
},
{
"name": "Arsene Wenger",
"department": "Bar",
"manager": "Friar Tuck",
"salary": 50
},
{
"name": "Friar Tuck",
"department": "Foo",
"manager": "Robin Hood",
"salary": 100
},
{
"name": "Little John",
"department": "Foo",
"manager": "Robin Hood",
"salary": 100
},
{
"name": "Sam Allardyce",
"department": "",
"manager": "",
"salary": 250
},
{
"name": "Dimi Berbatov",
"department": "Foo",
"manager": "Little John",
"salary": 50
}
]
輸出(Avro 架構)
{
"name": "MyClass",
"type": "array",
"namespace": "com.acme.avro",
"items": {
"name": "MyClass_record",
"type": "record",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "department",
"type": "string"
},
{
"name": "manager",
"type": "string"
},
{
"name": "salary",
"type": "int"
}
]
}
}
將 Json Schema 作為輸入也不錯。
這個問題是前一段時間被問到的,但沒有好的答案。
有一個網站可以做到這一點,但我想要一個圖書館或 cli。
謝謝!
事實證明,這可以通過avro4s 實現。 它是一個 Scala 庫,我對 Java 一無所知。
這是一個關於如何使用它的簡單示例。 我有包含屬性的事件。
package example
import com.sksamuel.avro4s.AvroSchema
import com.sksamuel.avro4s.json.JsonToAvroConverter
object Main extends App {
case class Propertie(name: String, value: String)
case class Event(name: String, properties: Seq[Propertie])
val schema = AvroSchema[Event]
val converter = new JsonToAvroConverter("com.example.kafkaorch")
val string =
"""{
| "AvroEvent": {
| "name": "order-created",
| "AvroPropertie": {
| "name": "",
| "type": "",
| "value":""
| }
| }
|}""".stripMargin
print(converter.convert("test", string).toString(true))
}
結果應該是這樣的:
{
"type" : "record",
"name" : "test",
"namespace" : "com.example.kafkaorch",
"fields" : [ {
"name" : "AvroEvent",
"type" : {
"type" : "record",
"name" : "AvroEvent",
"fields" : [ {
"name" : "name",
"type" : "string"
}, {
"name" : "AvroPropertie",
"type" : {
"type" : "record",
"name" : "AvroPropertie",
"fields" : [ {
"name" : "name",
"type" : "string"
}, {
"name" : "type",
"type" : "string"
}, {
"name" : "value",
"type" : "string"
} ]
}
} ]
}
} ]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.