如何在 ProtoBuffers 3 中建模 map<string, map<string, int>>

How to model map<string, map<string, int>> in ProtoBuffers 3

我正在使用 Go 实现一个 API 端点,该端点应该 return 数据如下所示:

{
    "object1s": [
        {
            "object2": {
                "key1": {
                    "key3": 1,
                    "key4": 2,
                    "key5": 3
                },
                "key2": {
                    "key3": 4,
                    "key4": 5,
                    "key5": 6
                }
            }
        },
        {
            "object2": {
                "key1": {
                    "key3": 7,
                    "key4": 8,
                    "key5": 9
                },
                "key2": {
                    "key3": 10,
                    "key4": 11,
                    "key5": 12
                }
            }
        }
    ]
}

如何使用 proto3 对此进行建模?

我有这个:

message SubObject {
  map<string, map<string, int32>> object2 = 1;
}

message ResponseMessage {
  repeated SubObject object1s = 1;
}

但我认为语法 map<string, map<string, int>> 无效。 那么描述SubObject的正确方法是什么?

尚不支持您想要的方式。
现在,唯一的方法是创建一个 message 类型来保存内部 map 字段。

message InnerObject {
    map<string, int32> object3 = 1;
}

message SubObject {
    map<string, InnerObject> object2 = 1;
}

message ResponseMessage {
    repeated SubObject object1s = 1;
}

因此,您必须按如下方式修改您的 return 数据,

{
    "object1s": [
        {
            "object2": {
                "key1": {
                    "object3": {
                        "key3": 1,
                        "key4": 2
                    }
                }
            }
        }
    ]
}

参考:Issue#4596