用于使用平缓冲区进行序列化的动态ID和特殊字符

时间:2016-11-07 20:15:22

标签: json jsonserializer flatbuffers

我有如下的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;




我试图实现谷歌缓冲区,但我收到的错误如

  1. alarm.fbs:4:0:错误:非法字符:!
  2. alarm.fbs:23:0:错误:非法字符:$(我已删除!来自 !键入并将$更改为美元以测试平缓冲区的工作情况 但我无法改变动态ids)
  3. Sample.json:25:0:错误:未知字段:12279
  4. 现在我的问题,

    1. 是否可以在平缓冲区中使用动态ID,如果可能的话 我会继续吗?
    2. 可以在ids中使用特殊字符,如果可能的话怎么做?
    3. 提前致谢。

1 个答案:

答案 0 :(得分:0)

您不能在字段名称中包含!$等字符。只需使用type代替!type

不确定动态ID是什么意思。必须在架构中声明所有字段名称(键),因此它们不能是动态的。但是,如果你使你的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"
        }
      ]
    }
  ]
}

然后制作相应的架构。

请注意,我将“动态”列表转换为向量,并将id移动到对象本身。

其他提示:非动态的字符串值(如"alarm")如果将它们变为枚举,则占用的空间会减少。