protobuf any字段中的String的typeURL是什么

时间:2018-08-31 09:56:59

标签: protocol-buffers

在Protobuf中,“任意字段”由数据缓冲区和描述底层格式的typeURL组成。

问题:如果我想在我的任意字段中输入一个String,正确的typeURL是什么?

2 个答案:

答案 0 :(得分:0)

最近我也遇到了同样的问题,但是,在阅读了文档之后,恐怕我们的方向是错误的,正如doc of Any所说的

  

Any包含任意序列化的协议缓冲区消息以及一个    描述序列化消息类型的URL。

看到了吗?它旨在保留一条消息。由于string根本不是一条消息,因此您应该设计一条新消息,并使字符串成为消息的唯一字段。

message ExampleString {
    string TheField = 1
}

答案 1 :(得分:0)

字符串url类型应为npm run test

说您的信息是

type.googleapis.com/google.protobuf.StringValue

然后您可以使用以下字符串值生成AnyValue:

message Person {
  google.protobuf.Any any_value = 1;
}

将打印如下内容:

import (
  "github.com/golang/protobuf/ptypes/wrappers"
  "github.com/golang/protobuf/ptypes"
  "github.com/golang/protobuf/jsonpb"
)

A := &wrappers.StringValue{Value: "Hello!"}

any, err := ptypes.MarshalAny(A)
p := &pb.Person{
  AnyValue: any,
}

m := jsonpb.Marshaler{}
result, err := m.MarshalToString(p)
fmt.Println(result)

其他原始包装器在这里:https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto

注意:请确保在您的主容器中导入包装器

{anyValue":{"@type":"type.googleapis.com/google.protobuf.StringValue","value":"Hello!"}}