无法将JSON反序列化为protobuf结构字段

6
我有一个类似于这样的proto文件。
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\""];
}

我将尝试使用"encoding/json"库将以下JSON反序列化为protobuf:
我想使用“encoding/json”库将以下JSON反序列化为protobuf:
{
 "name": "India",
 "description": "test job",
 "data": { 
    "id": 1 
  }
}

将请求 JSON 解码为 protobuf 的代码如下:

json.NewDecoder(r.Body).Decode(req)

然而,在 JobCreateRequest 结构体中生成的 Data 字段总是设置为 nil。如何正确使用 protobuf 中的 struct Value 呢?

2个回答

11
如果您使用的是 google.golang.org/protobuf,那么您可以使用 google.golang.org/protobuf/encoding/protojson 进行转换。
req := &proto.JobCreateRequest{}
err := protojson.Unmarshal(bytes, req)

6

由于Saurav正在使用gogo proto,您可能想要使用gogo的jsonpb版本,我认为它略有不同:https://github.com/gogo/protobuf/blob/master/jsonpb/jsonpb.go - David Budworth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接