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;

Google フラット バッファを実装しようとしていますが、次のようなエラーが発生します

  1. alarm.fbs:4:0: エラー: 不正な文字: !
  2. alarm.fbs:23:0: エラー: 不正な文字: $ (フラット バッファの動作をテストするために !type から ! を削除し、$ をドルに変更しましたが、動的 ID を変更できません)
  3. Sample.json:25:0: エラー: 不明なフィールド: 12279

今、私の質問は、

  1. フラット バッファで動的 ID を使用することは可能ですか?
  2. ID に特殊文字を使用できますか? 可能であれば、その方法は?

前もって感謝します。

4

1 に答える 1

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") は、代わりに列挙型にすると、使用するスペースが大幅に少なくなります。

于 2016-11-07T21:13:59.600 に答える