在protobuf 3中是否有一种实现map<string,map<string,list<string>>>的方法?

4

我尝试过这个方法,但存在作用域问题。

message DataCollectionMessage {

    message subData
    {
        message SubDataList {
            repeated string data = 1;
        }
        map<string, subData> parameters = 1;
    }
    map<string,SubDataList> parameters =1;
}

在这里,SubDataList和subData有未解决的引用。


消息 SubDataList { 重复的字符串数据 = 1; }消息 subData { 映射<string,SubDataList>参数= 1; }消息 DataCollectionMessage {映射参数= 1;} - Deepak Garg
看起来你已经解决了问题,这太好了。你可以将该评论编写为答案并将其标记为已接受,或者如果你认为它对其他人没有价值,可以删除你的问题。 - tom
如果您在上面的评论中没有找到解决方案,请解释一下您现在遇到了什么错误消息(因为在我看来它是正确的)。 - tom
1个回答

0

这个问题中 protobuf 只有一个小问题:最内层的 map 使用了 subData,而最外层的 map 使用了 SubDataList,但实际上应该反过来:

message DataCollectionMessage {
    message SubData {
        message SubDataList {
            repeated string data = 1;
        }
        map<string, SubDataList> parameters = 1;
    }
    map<string, SubData> parameters = 1;
}

(我也为了一致性将SubData大写。)

生成的Java代码将包含以下类(为了清晰起见进行了剪辑和重新排序):

public static final class DataCollectionMessage {

  public Map<String, DataCollectionMessage.SubData> getParametersMap() { ... }

  public static final class SubData {

    public Map<String, DataCollectionMessage.SubData.SubDataList> getParametersMap() { ... }

    public static final class SubDataList {
      public ProtocolStringList getDataList() { ... }
    }
  }
}

请注意,SubDataList有一个ProtocolStringList,类似于List<String>
如果您得到不同的结果,请发布您正在使用的protobuf文件以及生成的Java代码的相关部分。

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