首页 > 其他分享 >Go中json的marshal解析

Go中json的marshal解析

时间:2022-10-30 22:22:50浏览次数:40  
标签:Class string sex stu json 字符串 Go marshal

转自:https://blog.csdn.net/zxy_666/article/details/80173288

1.Json Marshal

将数据结构编码成json字符串。Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输。任意一端将数据转换成json 字符串,另一端再将该字符串解析成相应的数据结构,如string类型,struct对象等。 

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)
    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编码成字符串后就是纯粹的字符串了。

 2.Json Unmarshal

将json字符串解码到相应的数据结构。

type StuRead struct {
    Name  interface{} `json:"name"`
    Age   interface{}
    HIgh  interface{}
    sex   interface{}
    Class interface{} `json:"class"`
    Test  interface{}
}

type Class struct {
    Name  string
    Grade int
}

func main() {
    //json字符中的"引号,需用\进行转义,否则编译出错
    //json字符串沿用上面的结果,但对key进行了大小的修改,并添加了sex数据
    data:="{\"name\":\"张三\",\"Age\":18,\"high\":true,\"sex\":\"男\",\"CLASS\":{\"naME\":\"1班\",\"GradE\":3}}"
    str:=[]byte(data)

    //1.Unmarshal的第一个参数是json字符串,第二个参数是接受json解析的数据结构。
    //第二个参数必须是指针,否则无法接收解析的数据,如stu仍为空对象StuRead{}
    //2.可以直接stu:=new(StuRead),此时的stu自身就是指针
    stu:=StuRead{}
    err:=json.Unmarshal(str,&stu)

    //解析失败会报错,如json字符串格式不对,缺"号,缺}等。
    if err!=nil{
        fmt.Println(err)
    }

    fmt.Println(stu)
}

输出:

{张三 18 true <nil> map[naME:1班 GradE:3] <nil>}

不可导出的变量无法被解析(如sex变量,虽然json串中有key为sex的k-v,解析后其值仍为nil,即空值)

 

标签:Class,string,sex,stu,json,字符串,Go,marshal
From: https://www.cnblogs.com/BlueBlueSea/p/16842457.html

相关文章

  • babyJson
    学习从0到1的json实现(一)参考这个教程入门:https://github.com/miloyip/json-tutorial实现自己的json解释器过程中遇到了很多问题,这是一篇日志性质的踩坑记录…或许看......
  • if,三目运算符,switch,while,do...while,for,嵌套循环,break,continue,goto
    类型和C大致相同,此处仅仅列举语法格式和部分例题:________________________1.if格式与C相同:if(){}elseif(){}else{};嵌套也相同:if(){if(){};};例题......
  • Google Earth Engine(GEE)分析多个地区的植被覆盖趋势
    数据介绍:使用的是MODIS数据的NDVI和EVI来分析多个地区的植被覆盖趋势在GEE调用的数据名称为“MODIS/061/MOD13A1”本次利用MODIS数据中的两个数据分别是“NDVI”和"EVI"**ND......
  • django项目中分多个models.py创建table
    django创建每个app都默认有一个model.py文件。当app需要大量建立table,且需要分类时,能否建立多个model.py文件?1、在app文件夹下创建一个models文件夹(myapp/models/)。2、......
  • Google 登录,海外游戏接入
    ##准备1,开发者注册(需要25美元,国内任意一家visa信用卡都可以绑定支付,推荐招商银行的),商家账号注册(需要填写资料)2,创建项目-打开网址https://console.cloud.google.com/,......
  • springboot~写一个从excel读取json到List<Map>的方法
    excel读出来的json,它是一个字符串,不是标准json,所以需要对字符串字段进行解析复杂的excel如图通过poi解析json,通过jackson完成对字段的解析publicstaticList<Map<String,O......
  • Django开发入门
    安装pipinstalldjango构建项目django-adminstartprojectbysms说明manage.py是一个工具脚本,用作项目管理的。以后我们会使用它执行管理操作。里面的bysms/目录是pytho......
  • Django(一) | 创建Django项目并启动
    聪明在于勤奋,天才在于积累——华罗庚查看Django版本MicrosoftWindows[版本10.0.19044.2130](c)MicrosoftCorporation。保留所有权利。D:\myPython>python-m......
  • Python代做编程辅导:ECM1414 Data Structures and Algorithms
    全文链接:tecdat.cn/?p=29696IntroductionInsertSort和MergeSort是排序算法中两个最基础的算法,虽然实际中很难用到,但是作为排序的启蒙还是不错的。此次要求写出Insert......
  • Algorithm代做编程辅导:CS406 Greed Algorithm
    全文链接:tecdat.cn/?p=29699IntroductionGreedyAlgorithm,也就是贪心算法,局部最优化的算法,虽然可以快速得到解,但是这个解往往不会是全局最优解。不过这个算法的思想倒是......