json - 无法将 json 解码为 protobuf 结构字段

标签 json go protocol-buffers

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

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:

{
 "name": "India",
 "description": "test job",
 "data": { 
    "id": 1 
  }
}

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

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

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

最佳答案

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

req := &proto.JobCreateRequest{}
err := protojson.Unmarshal(bytes, req)

关于json - 无法将 json 解码为 protobuf 结构字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52955253/

相关文章:

javascript - 无效的 JSON 原语 - Asp.Net MVC 4

javascript - 在 javascript 中迭代 json

docker - 将Go Server作为Docker容器运行时权限被拒绝错误

go - 可以在一个 FlatBuffers 缓冲区中编码多个表吗?

json - 解码格式不正确的日期时间

tcp - Protocol Buffer Wireshark 插件

javascript - 如何使用 jersey/jackson 生成多种类型的 json 数组

c++ - 有没有办法强制 Protocol Buffer 使用恒定的字段大小?

go - 在自己的原型(prototype)上导入 vendor 原型(prototype)

c# - Web Api 2 中的 Mvc 样式参数绑定(bind)?