Разбор json неверный тип - PullRequest
0 голосов
/ 03 февраля 2020

Я экспериментирую с 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 был строкой.

...