2013-10-24 1 views
2

Я хочу сериализовать объект JSON, который имеет потенциально переменное количество ключей, представляющих сотовые телефоны deviceid (из-за различий в Android и iPhone). Объект JSON может выглядеть, например (для Android):Возможно ли создать схему Avro для массива карт?

"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?

ответ

7

Да, карта является допустимым типом для массива. Ваша частности схема не является законной, однако, как это должно быть

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

То есть, поле вашей записи должно быть именем, а также определение типа для массива и карты оба должны быть полное определение дает как внешний комплекс тип (map/array) и содержащий тип.

Поскольку иногда бывает трудно ответить на конкретные вопросы Avro на основе имеющейся документации и хранилища примеров, самый простой способ ответить на этот вопрос, вероятно, просто попытается скомпилировать его, используя банку инструментов Avro, которая может можно найти рядом с обычными баночками в Avro releases.

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

Это быстро устранит обеспокоенность относительно того, действительно ли это действительно. Если это еще не решило проблему, то Avro mailing lists выглядит довольно активно.

Смежные вопросы