无法将 json 解组到 protobuf 结构字段

Sau*_*ash 4 json go protocol-buffers

我有一个与此类似的原型文件。

syntax = "proto3";
package proto;
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
import "google/protobuf/struct.proto";


message JobCreateRequest {
    string Name = 1 [(gogoproto.jsontag) = "name", (gogoproto.moretags)= "validate:\"required,max=100\""];
    string Description = 2 [(gogoproto.jsontag) = "description", (gogoproto.moretags) = "validate:\"required,max=100\""];
    google.protobuf.Value Data = 3 [(gogoproto.jsontag) = "data", (gogoproto.moretags) = "validate:\"required\""];
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用“encoding/json”库将 json 以下解组到 protobuf 中:

{
 "name": "India",
 "description": "test job",
 "data": { 
    "id": 1 
  }
}
Run Code Online (Sandbox Code Playgroud)

将请求json解码为protobuf的代码是:

json.NewDecoder(r.Body).Decode(req)
Run Code Online (Sandbox Code Playgroud)

但是 JobCreateRequest 结构中的结果 Data 字段始终设置为nil。在 protobuf 中使用 struct Value 的正确方法是什么?

bin*_*lip 11

如果您使用google.golang.org/protobuf,那么您可以使用google.golang.org/protobuf/encoding/protojson进行转换。

req := &proto.JobCreateRequest{}
err := protojson.Unmarshal(bytes, req)
Run Code Online (Sandbox Code Playgroud)


mat*_*tes 5

您可以使用github.com/golang/protobuf/jsonpb将 JSON 转换为 protobuf。

req := proto.JobCreateRequest{}
jsonpb.Unmarshal(r.Body, &req)
Run Code Online (Sandbox Code Playgroud)