Golang 结构体与 JSON 互相转换
时间: 2024-04-07 09:30:41 浏览: 94
在 Golang 中,我们可以使用内置的 `encoding/json` 包来实现结构体和 JSON 之间的互相转换。
以下是一个示例代码:
```go
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Address string `json:"address,omitempty"`
}
func main() {
// 将结构体转换为 JSON
p := Person{Name: "John", Age: 30}
jsonData, err := json.Marshal(p)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(jsonData))
// 将 JSON 转换为结构体
jsonStr := `{"name":"Mary","age":25}`
var p2 Person
err = json.Unmarshal([]byte(jsonStr), &p2)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(p2.Name, p2.Age, p2.Address)
}
```
运行以上代码,输出如下:
```
{"name":"John","age":30}
Mary 25
```
在结构体定义中,我们使用了 `json` 标记来指定 JSON 中字段的名称。例如,`Name` 字段对应 JSON 中的 `name` 字段。
在将结构体转换为 JSON 时,我们使用了 `json.Marshal()` 函数,它返回一个字节数组。在将 JSON 转换为结构体时,我们使用了 `json.Unmarshal()` 函数。注意,需要将 JSON 字符串转换为字节数组再传递给该函数。
此外,如果结构体中的某些字段在转换为 JSON 时不需要包含在内,我们可以使用 `omitempty` 选项来忽略它们。在上面的例子中,当 `Address` 字段为空时,转换为 JSON 后不会包含该字段。
阅读全文
相关推荐
















