1

我有一个 Java 类,包括一个嵌套列表字段,如:

private List<List<List<Integer>>> data;

但是如何在 protobuf 文件中描述它呢?我尝试这样,但它不能工作

repeated repeated repeated double data = 1;

==============更新======================

我尝试了 İlker Korkut 的回答,但是当我想将 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>

请帮我 !

4

1 回答 1

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;
}

当然,您可以在外部定义消息类型并在父消息中作为属性传递。

于 2019-03-07T12:53:34.700 回答