ProtoBuf解组密钥:[[“ abc”,“ 123”],[“ 123”]]

时间:2018-06-22 02:25:44

标签: go protocol-buffers

如何解组字符串列表?

类似的东西:

// Tried repeated string ... ListOfString.... repeated list of string
message Link {
        string id     = 1;
        string names = 2;    
}

jsonstr := `
{
   "names": [ ["Bill", "Susan"], ["Jim", "James"] ]
}`

// go code
jsonpb.Unmarshal(jsonstr, &pb.Link)

使用jsonpb解组:https://godoc.org/github.com/golang/protobuf/jsonpb

获取json:无法将数组解组为Go值

1 个答案:

答案 0 :(得分:2)

没有对应于给定JSON的协议缓冲区架构。协议缓冲区中的JSON支持实际上旨在为现有协议缓冲区消息定义JSON序列化。您不能将协议缓冲区用作任意JSON的架构,它根本不是为了做到这一点而设计的。

特别是,协议缓冲区使您可以将数组定义为重复字段,但是字段类型必须具有某种非数组类型,例如消息,基元或枚举。

您能做的最好的就是更改架构:

message Name {
    repeated string name = 1;
}

message Link {
    string id = 1;
    repeated string names = 2;
}

然后您可以更改JSON以匹配:

const jsonStr = `
{
  "names": [
    { "name": ["Bill", "Susan"] },
    { "name": ["Jim", "James"] }
  ]
}
`

func main() {
    var link pb.Link
    if err := jsonpb.UnmarshalString(jsonStr, &link); err != nil {
        fmt.Println("Error:", err)
    }
}

如果对JSON格式有严格的要求,则必须以其他方式反序列化JSON。