TypeScript / JavaScript gRPC google.protobuf.Struct 无法读取

Va5*_*li5 3 protocol-buffers node.js typescript grpc grpc-node

我有一个 TypeScript 服务器尝试使用 Struct 读取 JSON 对象,但它似乎仅部分适用于包含“fields”键的对象,然后该对象需要一个对象作为值。尽管如此,Struct 应该适用于任何 JSON 对象。

使用 BloomRPC 我正在尝试以下消息:

{
  "payload": {
    "fields": {
      "Hello": {
        "whatever": 0
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

服务器读取:

{ fields: { Hello: {} } }
Run Code Online (Sandbox Code Playgroud)

如果我发送:

{
  "payload": {
    "anotherfield": {
      "HelloWorld": {
        "whatever": 0
      }
    }
  }
} 
Run Code Online (Sandbox Code Playgroud)

我在服务器上得到一个空对象。

简化的 protobuf 文件如下所示:

syntax = "proto3";

import "google/protobuf/struct.proto";

// The service definition.
service TestTicketService {
  rpc UpdateTicket (UpdateTicketRequest) returns (UpdateTicketResponse);
}

// The request message containing the required ticket information.
message UpdateTicketRequest {
    string ticketId = 1;
    google.protobuf.Struct payload = 2;
}

// The response message containing any potential error message
message UpdateTicketResponse {
  string error = 1;
}
Run Code Online (Sandbox Code Playgroud)

知道为什么 google/protobuf/struct.proto 不能按预期工作吗?

Va5*_*li5 5

真正让我困惑的是我试图传递普通的 JSON 对象并期望读取它们。重点是,从客户端来看,JSON 对象需要以非常特定的方式进行编码。

例如:

"payload": {
    "fields": {
      "name": {
        "stringValue": "joe"
      },
      "age": {
        "numberValue": 28
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

您可以通过查看此处的 Struct proto 文件来确定消息的格式:https: //googleapis.dev/nodejs/asset/latest/v1_doc_google_protobuf_doc_struct.js.html