我正在使用Go来实现API端点,该端点应返回如下所示的数据:

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

因此,您必须按以下方式修改返回数据,

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

参考:问题#4596