Формат упаковки данных Google Protocol Buffers очень хорош тем, что:
Однако при конвертации в JSON, на данный момент, все преимущества формата стираются, так как:
Предлагается реализовать новый способ упаковки в JSON, чтобы:
Сообщение кодируется объектом, в котором:
k
содержит массив числовых кодов полей сообщенияv
содержит массив значений полей сообщения, при этом:
repeated
поля из описания сообщения кодируются массивами{ ... }
mo
содержит объект, описывающий опции сообщения (MessageOptions)fo
содержит объект, описывающий опции полей (FieldOptions)Описание сообщения в формате 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
}
]
}