Я экспериментирую с protobuf и разбираю JSON. Мой файл протока выглядит так:
syntax = "proto2";
package tutorial;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
Мне было интересно, есть ли хороший способ установить значение атрибута равным некоторому запасному значению при сбое синтаксического анализа json. Например, это не удастся с ValueError
, потому что id
должно быть int:
import addressbook_pb2
from google.protobuf import json_format
json_string = '{"name": "Bobby", "id": "-"}'
message = json_format.Parse(json_string, addressbook_pb2.Person())
Так что в приведенном выше примере желаемый сериализованный объект будет выглядеть примерно так:
name: Bobby
id: 0
то есть мы установили идентификатор на 0
, потому что тип строки id
in json был строкой.