2016-11-07 3 views
0

У меня есть JSON данные, как показано нижединамические идентификаторы и специальные символы для сериализации с плоскими буферами

{ 
    "!type": "alarm", 
    "$": { 
    "12279": { 
     "!type": "alarm", 
     "title": "Default", 
     "$": { 
     "5955": { 
      "!type": "alarm", 
      "name": "Wake", 
      "day": "SUN", 
      "startTime": "06:00" 
     }, 
     "29323": { 
      "!type": "alarm", 
      "name": "Away", 
      "day": "SUN", 
      "startTime": "08:00" 
     }, 
     "2238": { 
      "!type": "alarm", 
      "name": "Home", 
      "day": "SUN", 
      "startTime": "18:00" 
     } 
     } 
    } 
    } 
} 

Мой FBS выглядит следующим образом

namespace space.alarm; 
 

 
table Atom{ 
 
    !type:string; 
 
    name:string; 
 
    startDay:string; 
 
    startTime:string; } 
 

 
table AtomShell{ 
 
    key:string (required, key); 
 
    value: Atom; } 
 

 
table Alarm{ 
 
    !type:string; 
 
    title:string; 
 
    $:[AtomShell]; } 
 

 

 
table AlarmShell{ 
 
    key:string (required, key); 
 
    value:Alarm; } 
 

 

 
table Weeklyalarm{ 
 
    !type:string; 
 
    $:[AlarmShell]; } root_type Weeklyalarm;

Im пытается реализовать Google плоские буферы, но я получаю ошибки, такие как

  1. alarm.fbs: 4: 0: ошибка: незаконный характер:!
  2. alarm.fbs: 23: 0: ошибка: незаконный символ: $ (я удалил! Из ! Type и изменил $ на доллар, чтобы проверить работу плоских буферов , но я не могу изменить динамические идентификаторы)
  3. Sample.json: 25: 0: ошибка: неизвестно поле: 12279

Теперь мой вопрос,

  1. можно ли использовать динамические идентификаторы в плоских буферами, если это возможно, как должен я продолжаю?
  2. Может использовать специальные символы в идентификаторах, если возможно, как это сделать?

Заранее спасибо.

ответ

0

В именах полей у вас не может быть таких символов, как ! и $. Просто используйте type вместо !type и т. Д.

Не уверен, что вы подразумеваете под динамическими идентификаторами. Все имена полей (ключи) должны быть объявлены в схеме, поэтому они не могут быть динамическими. Вы все еще можете достичь подобных результатов, хотя, если вы сделаете свой JSON выглядеть примерно так:

{ 
    "type": "alarm", 
    "data": [ 
    { 
     id: "12279", 
     "type": "alarm", 
     "title": "Default", 
     "data": [ 
     { 
      "id": "5955", 
      "type": "alarm", 
      "name": "Wake", 
      "day": "SUN", 
      "startTime": "06:00" 
     }, 
     { 
      "id": "29323", 
      "type": "alarm", 
      "name": "Away", 
      "day": "SUN", 
      "startTime": "08:00" 
     }, 
     { 
      "id": "2238", 
      "type": "alarm", 
      "name": "Home", 
      "day": "SUN", 
      "startTime": "18:00" 
     } 
     ] 
    } 
    ] 
} 

А затем сделать соответствующую схему.

Обратите внимание, что я сделал «динамический» список в вектор и переместил идентификатор в сам объект.

Другие подсказки: строковые значения, которые не являются динамическими (например, "alarm"), будут занимать меньше места, если вы сделаете их перечислимыми.

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

  • Нет связанных вопросов^_^