【问题标题】:Is there a way to implement map<string, map<string, list<string>>> in protobuf 3?有没有办法在 protobuf 3 中实现 map<string, map<string, list<string>>>?
【发布时间】:2017-08-24 04:15:45
【问题描述】:

我试过了,但有范围问题。

message DataCollectionMessage {

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

这里的 SubDataList 和 subData 有未解析的引用。

【问题讨论】:

  • message SubDataList { 重复字符串数据 = 1; } message subData { map 参数 = 1; } 消息 DataCollectionMessage { map 参数 =1; }
  • 看来你的问题已经解决了,太好了。您可以将该评论写为答案并将其标记为已接受,或者如果您认为它对其他人没有价值,则删除您的问题。
  • 如果您上面的评论不能解决您的问题,请解释您现在收到的错误消息(因为它看起来对我来说是正确的)。

标签: java protocol-buffers avro proto protobuff.net


【解决方案1】:

问题中的protobuf只有一个小问题:最里面的地图使用subData,外部地图使用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&lt;String&gt;

如果您得到不同的结果,请发布您正在使用的 protobuf 文件以及生成的 Java 代码的相关部分。

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2018-09-22
    • 2020-01-26
    相关资源
    最近更新 更多