前言
在网络中以JSON编码的格式传输数据
发送方 将结构体变量编码为JSON字符串
接收方 将JSON字符串解码为结构体变量
核心步骤
创建一个结构体变量并赋值
将其编码为JSON编码格式
再将解码为结构体变量格式
详细代码加注释
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Id int
Name string
Age int
gender string //小写
}
func main() {
//在网络中以JSON编码的格式传输数据
//发送方 将结构体变量编码为JSON字符串
//接收方 将JSON字符串解码为结构体变量
lily0 := Student{
Id: 1,
Name: "lily",
Age: 20,
gender: "女士",
}
//将结构体变量编码为JSON字符串
encodeInfo, err := json.Marshal(&lily0)
if err != nil {
fmt.Println("json.Marshal err:", err)
return
}
//打印JSON编码 发现gender变量没有显示
//说明小写字母开头的变量在编码成JSON时会被忽略
//大写字母开头的变量名表示公有权限
//小写字母开头的变量名表示私有权限
fmt.Println("encodeInfo:", string(encodeInfo))
//将JSON字符串解码为结构体变量
//创建一个相同的结构体对象用来储存解码的结果
var lily1 Student
err = json.Unmarshal([]byte(encodeInfo), &lily1)
if err != nil {
fmt.Println("json.Unmarshal err:", err)
return
}
fmt.Println(lily1)
}
注意点
打印JSON编码 发现gender变量没有显示
说明小写字母开头的变量在编码成JSON时会被忽略
大写字母开头的变量名表示公有权限(可以在其他的package中访问)小写字母开头的变量名表示私有权限 (只能在本package中访问)
效果展示(终端显示的内容)
PS D:\Projects\GolangProjects\workspace\src> go run .\http\json.go
encodeInfo: {"Id":1,"Name":"lily","Age":20}
{1 lily 20 }
PS D:\Projects\GolangProjects\workspace\src>
结构体标签
在结构体中字段后面 用 反引号(通常位于键盘左上角)
type Teacher struct {
Name string `json:"-"` //指定这个变量不参与JSON编码
Subject string `json:"subjectName"` //指定字段在JSON编码中的别名
Age int `json:"age,string"` //指定字段的别名并修改字段类型Address string `json:"address,omitempty"` //空字段自动忽略
gender string //小写字母开头的变量名 会被JSON编码忽略
}
package main
import (
"encoding/json"
"fmt"
)
type Teacher struct {
Name string `json:"-"` //指定这个变量不参与JSON编码
Subject string `json:"subjectName"` //指定字段在JSON编码中的别名
Age int `json:"age,string"` //指定字段的别名并修改字段类型
Address string `json:"address,omitempty"` //空字段自动忽略
gender string //小写字母开头的变量名 会被JSON编码忽略
}
func main() {
lily := Teacher{
Name: "lily",
Subject: "Golang",
Age: 30,
gender: "男士",
}
fmt.Println("lily:", lily)
encodeInfo, _ := json.Marshal(&lily)
fmt.Println("encodeInfo:", string(encodeInfo))
}
效果展示(终端显示的内容)
PS D:\Projects\GolangProjects\workspace\src> go run .\http\json.go
lily: {lily Golang 30 男士}
encodeInfo: {"subjectName":"Golang","age":"30"}(引号内的30表示字符串格式)
PS D:\Projects\GolangProjects\workspace\src>