2017-08-24 193 views
0

我試過這個,但有範圍問題。有沒有在protobuf 3中實現map <string,map <string,list <string> >>的方法?

message DataCollectionMessage { 

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

這裏SubDataList和subData有未解析的引用。

+0

消息SubDataList重複的字符串數據= 1; } 消息子數據 { map parameters = 1;數據收集消息 { } map parameters = 1; } –

+0

看起來你已經解決了你的問題,這很好。您可以將該評論寫爲答案並將其標記爲已接受,或者如果您認爲該評論對其他人沒有價值,請將其刪除。 – tom

+0

如果您的評論不是您的問題的解決方案,請解釋您現在得到的錯誤消息(因爲它對我來說很合適)。 – tom

回答

0

只是有一個在問題的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<String>

如果您得到不同的結果,請發佈您正在使用的protobuf文件以及生成的Java代碼的相關部分。

相關問題