Конвертация из Google Protocol Buffers в JSON

Статус документа

Оглавление

Введение

Формат упаковки данных Google Protocol Buffers очень хорош тем, что:

Однако при конвертации в JSON, на данный момент, все преимущества формата стираются, так как:

Предлагается реализовать новый способ упаковки в JSON, чтобы:

Описание формата кодирования

Сообщение кодируется объектом, в котором:

Примеры кодирования

Описание сообщения в формате proto:

enum HumanSex {
    MALE = 1;
    FEMALE = 2;
}

message Human {
  optional string name = 1;
  optional int32 age = 2;
  optional HumanSex sex = 3;
  optional bool alive = 4;

  optional Human spouse = 10;
  repeated Human children = 11;
}

Кодированное сообщение в формате Protocol JSON:

{
  "k": [ 1, 2, 3, 4, 10, 11 ], 
  "v": [ "Иванов Сергей Викторович", 30, 1, true, {
    "k": [ 1, 4 ],
    "v": [ "Иванова Галина Михайловна", true ]
    }, [
      {
        "k": [ 1, 3 ],
        "v": [ "Сидорова Елена Сергеевна", 2 ]
      },
      {
        "k": [ 1, 3 ],
        "v": [ "Иванова Ирина Сергеевна", 2 ]
      }
    ] ]
}

Представление объекта в коде:

{
  "name": "Иванов Сергей Викторович",
  "age": 30,
  "sex": 1,
  "alive": true,
  "spouse": {
    "name": "Иванова Галина Михайловна",
    "alive": true
  },
  "children": [
    {
      "name": "Сидорова Елена Сергеевна",
      "sex": 2
    },
    {
      "name": "Иванова Ирина Сергеевна",
      "sex": 2
    }
  ]
}