结构体和json互转 
                                                    
                        
                    
                    
  
                    
                    结构体转json
假设现在有这样的一个数据结构,先用结构体实现,然后转为json
班级
    班号
    学习列表
        学生1
            学生学号
            性别
            名称
        学生2使用结构体实现上述数据结构
package main
import (
    "fmt"
    "math/rand"
    "time"
)
// 班级信息结构体
type Class struct {
    ClassCode string    // 班级编号
    Students  []Student // 学生列表, 这里是一个切片类型,切片里面是多个学生数据
}
// 学生信息结构体
type Student struct {
    StudentCode int    // 学生学号
    Name        string // 学生名称
    Gender      int8   // 性别
}
func main() {
    // 创建一个班级实例
    myClass := Class{
        ClassCode: "高三1班",
        Students:  []Student{}, // 初始化一个空切片, 切片的元素是Student结构体
    }
    fmt.Printf("%#v\n", myClass) // main.Class{ClassCode:"高三1班", Students:[]main.Student{}}
    // 填充10个学生到班级下的学生列表中
    rand.Seed(time.Now().UnixNano())
    for i := 1; i <= 10; i++ {
        stuObj := Student{
            StudentCode: i,
            Name:        fmt.Sprintf("学生%02d", i),
            Gender:      int8(rand.Intn(2)),
        }
        fmt.Printf("%#v\n", stuObj)
        myClass.Students = append(myClass.Students, stuObj)
    }
    fmt.Printf("%#v\n", myClass)
    // 结构体转json
    data, err := json.Marshal(myClass)
    if err != nil {
        fmt.Println("myClass转json失败", err)
        return
    }
    // 输出json
    fmt.Printf("%s\n", data)
}
json转为结构体
// 准备一个json字符串
jsonStr := `{"ClassCode":"高三1班","Students":[{"StudentCode":1,"Name":"学生01","Gender":1},{"StudentCode":2,"Name":"学生02","Gender":0},{"StudentCode":3,"Name":"学生03","Gender":1},{"StudentCode":4,"Name":"学生04","Gender":0},{"StudentCode":5,"Name":"学生05","Gender":0},{"StudentCode":6,"Name":"学生06","Gender":1},{"StudentCode":7,"Name":"学生07","Gender":1},{"StudentCode":8,"Name":"学生08","Gender":1},{"StudentCode":9,"Name":"学生09","Gender":1},{"StudentCode":10,"Name":"学生10","Gender":1}]}`
// 初始化一个Class空结构体
myClass := &Class{}
err := json.Unmarshal([]byte(jsonStr), myClass) // []byte(jsonStr)表示将字符串转为字节切片,Unmarshal第二个参数是引用类型,所以myClass声明时,需要给指针地址
if err != nil {
    fmt.Println("json转结构体失败", err)
    return
}
fmt.Printf("%#v\n", myClass)
fmt.Println(myClass.ClassCode)本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           Junwind 的个人博客
 Junwind 的个人博客
         
             
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: