在 golang 中,我们可以使用 jsonpb
包将 JSON 字符串转换为 protobuf message。
首先,我们需要定义一个 protobuf message,并生成对应的 go 文件。假设我们的 protobuf 文件名为 person.proto
,其中包含如下定义:
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
}
然后,我们就可以使用 jsonpb.UnmarshalString
函数将 JSON 字符串转换为 Person
类型的 protobuf message。示例代码如下:
package main
import (
"fmt"
"github.com/golang/protobuf/jsonpb"
"github.com/golang/protobuf/proto"
)
func main() {
jsonString := `{"name": "Tom", "age": 25}`
person := &Person{}
if err := jsonpb.UnmarshalString(jsonString, person); err != nil {
fmt.Println("Failed to unmarshal json:", err)
return
}
fmt.Printf("Name: %s, Age: %d\n", person.GetName(), person.GetAge())
}
输出:
Name: Tom, Age: 25
注意,在使用 jsonpb.UnmarshalString
函数之前,我们需要先创建一个空的 Person
类型的 protobuf message。这里我们使用 &Person{}
来创建一个空的 Person
类型对象。如果出现解析错误,函数会返回非空的错误对象。
另外,我们需要在代码中添加如下两行导入语句:
import "github.com/golang/protobuf/jsonpb"
import "github.com/golang/protobuf/proto"
其中第一行是导入 jsonpb
包,用于将 JSON 字符串转换为 protobuf message;第二行是导入 proto
包,用于操作 protobuf message。