Introduction to VPS and Web Technology Development

go语言的json与结构体之间的转换

自由vps 无分类
package main
 
import (
    "encoding/json"
    "fmt"
)
 
type Stu struct {
    Name  string `json:"name"`
    Age   int
    HIgh  bool
    sex   string
    Class *Class `json:"class"`
}
 
type Class struct {
    Name  string
    Grade int
}
 
func main() {
    //实例化一个数据结构,用于生成json字符串
    stu := Stu{
        Name: "张三",
        Age:  18,
        HIgh: true,
        sex:  "男",
    }
 
    //指针变量
    cla := new(Class)   //这个new方法,就相当于  cla := &Class{},是一个取地址的操作。
    cla.Name = "1班"
    cla.Grade = 3
    stu.Class = cla
 
    //Marshal失败时err!=nil
    jsonStu, err := json.Marshal(stu)
    if err != nil {
        fmt.Println("生成json字符串错误")
    }
 
    //jsonStu是[]byte类型,转化成string类型便于查看
    fmt.Println(string(jsonStu))
}
 
//打印效果:
{"name":"张三","Age":18,"HIgh":true,"class":{"Name":"1班","Grade":3}}
从结果中可以看出
 
只要是可导出成员(变量首字母大写),都可以转成json。因成员变量sex是不可导出的,故无法转成json。
 
如果变量打上了json标签,如Name旁边的 `json:"name"` ,那么转化成的json key就用该标签“name”,否则取变量名作为key,如“Age”,“HIgh”。
 
bool类型也是可以直接转换为json的value值。Channel, complex 以及函数不能被编码json字符串。当然,循环的数据结构也不行,它会导致marshal陷入死循环。
 
指针变量,编码时自动转换为它所指向的值,如cla变量。
(当然,不传指针,Stu struct的成员Class如果换成Class struct类型,效果也是一模一样的。只不过指针更快,且能节省内存空间。)
 
最后,强调一句:json编码成字符串后就是纯粹的字符串了。
使用chatGPT寻求答案
标签: 暂无标签

免责声明:

本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:master@freevpsweb.com

同类推荐
评论列表