【问题标题】:Represent a protobuf map as a json将 protobuf 映射表示为 json
【发布时间】:2018-10-05 17:05:51
【问题描述】:

我正在使用基于 protobuf.js 的 grpcc 来测试我的 grpc 服务 API。

我的.proto 文件:

message MyRequest {
    string userId = 1;
    map<string, string> params = 2;
}

我尝试了以下 json 正文来发送请求:

{userId : "my_user_id" , params: { name: "my_name"}}
{userId : "my_user_id" , params: [{"name":"my_name"}] }

但这会产生以下错误:

Error: Illegal value for Message.Field....MyRequest.params of type string: object (expected ProtoBuf.Map or raw object for map field)

如何正确地将 protobuf 映射表示为 json?

【问题讨论】:

标签: grpc proto protobufjs


【解决方案1】:

正确的 json 正文如下:

{ "userId": "my_user_id", "params": { "name": "my_name" } }

您尝试做的是一组映射,这在 protobuf 的上下文中并没有任何意义。 map&lt;string, string&gt; 正是对 json 对象的描述,因此多个值将通过以下方式表示:

{ "params": { "key1": "value1", "key2": "value2" } }

不需要数组。

【讨论】:

  • 我已经尝试过这种方式。仍然是同样的错误。我添加了我尝试过的两种情况
  • 也许这与grpcc有关。当与 protobufjs 和 grpc 一起使用时,Protobuf 映射确实可以转换为 JavaScript 中的普通对象。我在我的 grpc 项目中使用这个属性已经有一段时间了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多