본문으로 건너뛰기

Protobuf Type

Languages

proto type mapping

protonotegopython3json
doublefloat64floatnumber
floatfloat32floatnumber
int32음수가 있는 경우 sint32를 사용int32intnumber
int64음수가 있는 경우 sint64를 사용int64int/longstring
uint32uint32int/longnumber
uint64uint64int/longstring
sint32int32intnumber
sint64int64int/longstring
fixed324 bytes로 표현, 2^28 이상의 수를 많이 사용할 경우 효율적uint32int/longnumber
fixed648 bytes로 표현, 2^56 이상의 수를 많이 사용할 경우 효율적uint64int/longstring
sfixed324 bytes로 표현int32intnumber
sfixed648 bytes로 표현int64int/longstring
boolboolboolboolean
stringUTF-8 or ASCII, 길이는 2^32로 제한됨stringunicode/strstring
bytes[]bytebytesbase64String
messagejson으로 변환할 때, key로 camelCase 사용object
enumstring
map<K,V>map[K]Vdict[K,V]object
repeated V[]Vlist[V]array
Timestamp"1972-01-01T10:00:20.021Z"
정보

protobuf -> json으로 변환될 때는 위 표를 따르지만, json -> protobuf로 변환될 때는 허용되는 타입이 더 넓어집니다. 예를 들어 message에서 필드 명은 camelCase로 변환되지만, json에서 필드명은 snake_case를 사용해도 됩니다.

oneof

message Test {
oneof data {
bytes binary_data = 1;
string string_data = 2;
}
}

JSON으로 변환하는 경우 아래와 같이 변환됩니다.

{
"binaryData": "base64String"
}

// or

{
"stringData": "string"
}