Протобуф правильно поддерживает json для нулей, поскольку поддержка нуля нечетна? - PullRequest
0 голосов
/ 01 мая 2020

Я читаю этот пост на protobuf, поскольку я выполняю grp c json, чтобы заменить существующих клиентов для использования нашего json на grp c ... https://github.com/protocolbuffers/protobuf/issues/1451

builder.setName (null) не поддерживается, так как формат проводника «не» отправляет значение для null. Если это так, как мне сделать json эквивалент этих случаев

  • "имя": 1234
  • "имя": 0 // {defaultValue = 0 для int} на проводе
  • "имя": null
  • {имя не существует}

для меня, "не", вызов setName в protobuf будет = = {имя не существует} в двоичном формате, но вместо этого имя = 0 в двоичном формате. Как указать в protobuf этот случай, чтобы я мог оставаться совместимым с нашими существующими клиентами в json при переключении на protobuf?

FOR Java, в частности, нам нужен метод setAge (), и если я НЕ вызываю это, поле не будет существовать. Если я называю setAge (null), это маршал "age": null. Если я вызову setAge (0), это приведет к «возрасту»: 0 (значение по умолчанию). Если я называю setAge (56) нестандартным значением, это маршал "age": 56

Затем мы хотим того же с protobuf. Конечно, формат провода МОЖЕТ добавить дополнительные поля. Это нормально, и из-за того, что значения по умолчанию не распределяются по проводам, поэтому мы не можем определить между нулевым значением и значением по умолчанию :(. У нас все в порядке с дополнительными данными по проводам для KISS для разработчиков.

Существует ли прототипная схема, которую мы можем использовать для этого, чтобы иметь простые методы setAge (null), которые приводят к «name»: null.

Вот что я пытаюсь сделать прямо сейчас для выше

message SomeMessage {
  string clientId = 1;
  oneof optional_result { // "optional_" prefix here just serves as an indicator, not keyword in proto2
      bool isAccepted = 5;
  }
 }

Затем я вижу метод getIsAccepted (), который возвращает «логическое значение». Я не вижу поля для hasIsAccepted (). Я не уверен, как определить схему для сопоставления с этим ' одно поле 'json.

LOL, потому что я только что добавил сюда grp c json для нашей платформы и не уверен, что protobuf может поддерживать все json сценарии использования ....

https://github.com/deanhiller/webpieces/tree/master/webserver-plugins/plugin-grpc-json

Бизнес-кейс: Некоторые клиенты спрашивают, хотим ли мы получить истину, если страховка принята, и ложь, если она не принята, и ноль, если она не существует. - дела здесь.

спасибо, Дин

1 Ответ

0 голосов
/ 01 мая 2020

Для следующего человека (и я использую свои сообщения на SO и ответы в качестве своей личной базы знаний) я нашел эту удивительную статью ...

https://itnext.io/protobuf-and-null-support-1908a15311b6

...