gpt4 book ai didi

json - 是否可以为一组 map 创建 Avro 模式?

转载 作者:可可西里 更新时间:2023-11-01 14:42:50 28 4
gpt4 key购买 nike

我想序列化一个 JSON 对象,该对象具有可能可变的键数,表示手机设备 ID(由于 Android 和 iPhone 的差异)。例如,JSON 对象可能如下所示(对于 Android):

"deviceids":{
"openudid":"",
"androidid":"dcbfXXXXXc2d5f",
"imei":"3533XXXXX941712"
}

而 iPhone 看起来像这样:

"deviceids":
{
"openudid":"37368a5361XXXXXXXXXXdaedc186b4acf4cd4",
"ifv":"BD87ECBF-XXXXXXXXXX-DDF46E18129A",
"mac":"XXXXXXXXXX",
"odin":"2f5672cXXXXXXXXXX2022a5349939a2d7b952",
"ifa":"82F7B2AXXXXXXXXXX5-A2DADA99D05B"
}

在 Avro 中,我认为这样的模式可以解释差异:

{
"name":"deviceids",
"type":"record",
"fields":[
{
"type":"array",
"items":{
"type":"map",
"values":"string"
}
}
]
}

这是有效的 Avro 架构吗?

最佳答案

是的,映射是数组的有效类型。然而,您的特定模式不合法,因为它应该是

{
"name":"deviceids",
"type":"record",
"fields":[
{ "name": "arrayOfMaps",
"type":{
"type": "array",
"items":{
"type":"map",
"values":"string"
}
}
}
]
}

也就是说,您的记录的字段必须命名,并且数组和映射的类型定义都必须是完整定义,同时给出外部复杂类型(映射/数组)和包含的类型。

由于有时很难根据可用的文档和示例库来回答特定的 Avro 问题,回答此类问题的最简单方法可能就是尝试使用 Avro 工具 jar 对其进行编译,它可以是在 Avro releases 中的常规 jar 旁边找到.

java -jar avro-tools-1.7.5.jar compile schema /path/to/schema .

这将很快解决它是否有效的问题。如果这仍然不能解决问题,Avro mailing lists看起来相当活跃。

关于json - 是否可以为一组 map 创建 Avro 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19573880/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com