2017-09-05 16 views
0

匿名结构在给定一个围棋结构类似这样的协议缓存格式

type House struct { 
    Address string 
    Rooms []struct { 
     Name string 
     Windows int 
     Doors int 
    } 
} 

或等效的JSON表示:

{ 
    "address": "" 
    "rooms": [ 
     { 
      "name": "" 
      "windows": 0 
      "doors": 0 
     } 
    ] 
} 

什么会等效协议缓冲区表示呢?

这是多还是少,我想做些什么操作(虽然不是一个有效的原语法):

message House { 
    string address = 1; 
    repeated message { 
     string name = 3; 
     int32 windows = 4; 
     int32 doors = 5; 
    } rooms = 2; 
} 

相反,做这样是有效的,但不能准确地表示,因为该数据原来rooms片包含匿名对象:

message House { 
    string address = 1; 
    repeated room rooms = 2; 
} 

message room { 
    string name = 1; 
    int32 windows = 2; 
    int32 doors = 3; 
} 

更新:我想我误解了消息声明是如何工作的。我给出的第二个示例应该足够,并且实际上不会影响JSON解组。

+0

为什么它关系到protobuf中结构的名称? – akond

+0

我试图将一个JSON文档解组到Go结构中。但是因为我使用Protocol Buffers作为序列化格式,所以我需要匹配由它们生成的JSON名称。 – Rtsne42

回答

0

为了达到你想要什么,摆脱匿名结构的,我想你应该在众议院宣告室消息,然后将它设为重复,像这样:

message House { 
    message room { 
    string name = 1; 
    int32 windows = 2; 
    int32 doors = 3;   
    } 
    string address = 1; 
    repeated room rooms = 2; 
} 

这将对应于以下结构在进行:

type House struct { 
    name   string      
    rooms  []*room 
} 

type room struct { 
    name string 
    windows int32 
    doors int32 
} 
+0

谢谢,但这与我给出的第二个例子完全相同。 – Rtsne42