我有一个Java类,包括一个嵌套列表字段,如:
private List<List<List<Integer>>> data;
但是如何在protobuf文件中描述它? 我这样尝试,但无法正常工作
repeated repeated repeated double data = 1;
==============更新====================
我尝试了İlkerKorkut的答案,但是当我想将json转换为protobuf时,它失败了。我的json如下:
{"data":[[[139,35],[138,34]]]}
和我的protobuf文件如下:
syntax = "proto3";
option java_package = "com.y.probuf";
message A {
message B{
message C {
repeated int32 score = 1;
}
repeated C item = 1;
}
repeated B data = 1;
}
使用Java代码将json转换为protobuf:
User.A.Builder builder = User.A.newBuilder();
JsonFormat.parser().merge(s,builder);
User.A a = builder.build();
System.out.println(a.toString());
它引发异常“期望消息对象,但得到:[[139,35],[138,34]]”
maven文件如下:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>3.6.1</version>
</dependency>
请帮助我!
答案 0 :(得分:0)
根据protobuf文档;您必须创建嵌套的消息类型,以便在需要时将数据保存在嵌套列表中。
我准备了一个例子;
syntax = "proto3";
package protobuf;
option java_package = "mypackage";
option java_outer_classname = "MyObject";
message A {
message B {
message C {
repeated string name = 1;
}
repeated C c = 1;
}
repeated B b = 1;
}
您当然可以定义外部消息类型,并在父消息中将其作为属性传递。