当前位置:实例文章 » HTML/CSS实例» [文章]Golang Json 编解码

Golang Json 编解码

发布人:shili8 发布时间:2025-02-28 22:31 阅读次数:0

**Go语言中的JSON编解码**

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和书写。Go语言提供了一个强大的JSON编解码库,可以方便地将Go结构体转换为JSON字符串,并且可以从JSON字符串中反序列化为Go结构体。

**json包**

Go语言中的`encoding/json`包提供了JSON编解码的功能。这个包包含两个主要函数:`Encode()`和`Decode()`。

### Encode()

`Encode()`函数用于将Go结构体转换为JSON字符串。它接受一个参数,表示要序列化的结构体,然后返回一个字节流(即JSON字符串)。

gopackage mainimport (
"encoding/json"
"fmt"
)

type Person struct {
	Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}

func main() {
	p := &Person{
	Name: "John",
Age:30,
Email: "john@example.com",
}
	jsonStr, err := json.Marshal(p)
	if err != nil {
	fmt.Println(err)
	return}
	fmt.Println(string(jsonStr))
}


在上面的例子中,我们定义了一个`Person`结构体,并将其序列化为JSON字符串。注意,`json:"name"`这样的注释是用于指定JSON中的键名的。

### Decode()

`Decode()`函数用于从JSON字符串反序列化为Go结构体。它接受两个参数:一个字节流(即JSON字符串)和一个指向要填充的结构体的指针。

gopackage mainimport (
"encoding/json"
"fmt"
)

type Person struct {
	Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}

func main() {
	jsonStr := `{"name":"John","age":30,"email":"john@example.com"}`
	var p Person	err := json.Unmarshal([]byte(jsonStr), &p)
	if err != nil {
	fmt.Println(err)
	return}
	fmt.Println(p.Name, p.Age, p.Email)
}


在上面的例子中,我们使用`json.Unmarshal()`函数将JSON字符串反序列化为一个`Person`结构体。

### Marshal()

`Marshal()`函数用于将Go结构体转换为JSON字节流。它接受一个参数,表示要序列化的结构体,然后返回一个字节流(即JSON字符串)。

gopackage mainimport (
"encoding/json"
"fmt"
)

type Person struct {
	Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}

func main() {
	p := &Person{
	Name: "John",
Age:30,
Email: "john@example.com",
}
	jsonStr, err := json.Marshal(p)
	if err != nil {
	fmt.Println(err)
	return}
	fmt.Println(string(jsonStr))
}


在上面的例子中,我们使用`json.Marshal()`函数将一个`Person`结构体序列化为JSON字节流。

### Unmarshal()

`Unmarshal()`函数用于从JSON字节流反序列化为Go结构体。它接受两个参数:一个字节流(即JSON字符串)和一个指向要填充的结构体的指针。

gopackage mainimport (
"encoding/json"
"fmt"
)

type Person struct {
	Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}

func main() {
	jsonStr := `{"name":"John","age":30,"email":"john@example.com"}`
	var p Person	err := json.Unmarshal([]byte(jsonStr), &p)
	if err != nil {
	fmt.Println(err)
	return}
	fmt.Println(p.Name, p.Age, p.Email)
}


在上面的例子中,我们使用`json.Unmarshal()`函数将JSON字节流反序列化为一个`Person`结构体。

### MarshalIndent()

`MarshalIndent()`函数用于将Go结构体转换为JSON字节流,并且可以指定缩进的字符。它接受两个参数:表示要序列化的结构体和一个字符串,表示缩进的字符,然后返回一个字节流(即JSON字符串)。

gopackage mainimport (
"encoding/json"
"fmt"
)

type Person struct {
	Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}

func main() {
	p := &Person{
	Name: "John",
Age:30,
Email: "john@example.com",
}
	jsonStr, err := json.MarshalIndent(p, "", "t")
	if err != nil {
	fmt.Println(err)
	return}
	fmt.Println(string(jsonStr))
}


在上面的例子中,我们使用`json.MarshalIndent()`函数将一个`Person`结构体序列化为JSON字节流,并且指定了缩进的字符。

### UnmarshalIndent()

`UnmarshalIndent()`函数用于从JSON字节流反序列化为Go结构体,并且可以指定缩进的字符。它接受三个参数:一个字节流(即JSON字符串)、一个指向要填充的结构体的指针和一个字符串,表示缩进的字符。

gopackage mainimport (
"encoding/json"
"fmt"
)

type Person struct {
	Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}

func main() {
	jsonStr := `{"name":"John","age":30,"email":"john@example.com"}`
	var p Person	err := json.UnmarshalIndent([]byte(jsonStr), &p, "t")
	if err != nil {
	fmt.Println(err)
	return}
	fmt.Println(p.Name, p.Age, p.Email)
}


在上面的例子中,我们使用`json.UnmarshalIndent()`函数将JSON字节流反序列化为一个`Person`结构体,并且指定了缩进的字符。

### Marshaler`Marshaler`接口用于表示可以将Go结构体转换为JSON字节流的类型。它有一个方法:`MarshalJSON()`,返回一个字节流(即JSON字符串)。

gopackage mainimport (
"encoding/json"
"fmt"
)

type Person struct {
	Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}

func (p *Person) MarshalJSON() ([]byte, error) {
	return json.Marshal(p)
}

func main() {
	p := &Person{
	Name: "John",
Age:30,
Email: "john@example.com",
}
	jsonStr, err := p.MarshalJSON()
	if err != nil {
	fmt.Println(err)
	return}
	fmt.Println(string(jsonStr))
}


在上面的例子中,我们定义了一个`Person`结构体,并实现了`Marshaler`接口。然后我们使用`p.MarshalJSON()`函数将这个结构体序列化为JSON字节流。

### Unmarshaler`Unmarshaler`接口用于表示可以从JSON字节流反序列化为Go结构体的类型。它有一个方法:`UnmarshalJSON()`,接受一个字节流(即JSON字符串)和一个指向要填充的结构体的指针。

gopackage mainimport (
"encoding/json"
"fmt"
)

type Person struct {
	Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}

func (p *Person) UnmarshalJSON(b []byte) error {
	return json.Unmarshal(b, p)
}

func main() {
	jsonStr := `{"name":"John","age":30,"email":"john@example.com"}`
	var p Person	err := p.UnmarshalJSON([]byte(jsonStr))
	if err != nil {
	fmt.Println(err)
	return}
	fmt.Println(p.Name, p.Age, p.Email)
}


在上面的例子中,我们定义了一个`Person`结构体,并实现了`Unmarshaler`接口。然后我们使用`p.UnmarshalJSON()`函数将JSON字节流反序列化为这个结构体。

### Marshaler和Unmarshaler`Marshaler`和`Unmarshaler`接口可以同时被实现,表示一个类型既可以将Go结构体转换为JSON字节流,也可以从JSON字节流反序列化为Go结构体。

gopackage mainimport (
"encoding/json"
"fmt"
)

type Person struct {
	Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
}

func (p *Person) MarshalJSON() ([]byte, error) {
	return json.Marshal(p)
}

func (p *Person) UnmarshalJSON(b []byte) error {
	return json.Unmarshal(b, p)
}

func main() {
	p := &Person{
	Name: "John",
Age:30,
Email

其他信息

其他资源

Top