golang中如何protobuf转json
时间: 2023-09-13 11:12:40 浏览: 134
在Go语言中,可以使用protobuf库中的jsonpb包将protobuf消息转换为JSON格式。以下是一个简单的示例:
```go
package main
import (
"encoding/json"
"github.com/golang/protobuf/jsonpb"
"github.com/golang/protobuf/proto"
"example.com/mypackage/mymessage"
"fmt"
)
func main() {
// 创建一个 protobuf 消息
myMsg := &mymessage.MyMessage{
Id: 1234,
Title: "Hello, World!",
Body: "This is a test message.",
}
// 将 protobuf 消息编码为 JSON 字符串
marshaler := jsonpb.Marshaler{}
jsonString, err := marshaler.MarshalToString(myMsg)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("JSON string:", jsonString)
// 将 JSON 字符串解码为 protobuf 消息
unmarshaler := jsonpb.Unmarshaler{}
newMsg := &mymessage.MyMessage{}
err = unmarshaler.UnmarshalString(jsonString, newMsg)
if err != nil {
fmt.Println("Error:", err)
return
}
// 验证解码后的消息是否与原消息相同
if !proto.Equal(myMsg, newMsg) {
fmt.Println("Decoded message does not match original message.")
return
}
fmt.Println("Decoded message:", newMsg)
}
```
在上面的示例中,我们首先创建了一个`MyMessage`类型的protobuf消息,并使用`jsonpb.Marshaler`将其编码为JSON字符串。然后,我们使用`jsonpb.Unmarshaler`将JSON字符串解码为另一个`MyMessage`类型的protobuf消息,并通过`proto.Equal`验证解码后的消息是否与原始消息相同。
阅读全文