golang生成JSON及解析JSON
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang生成JSON及解析JSON相关的知识,希望对你有一定的参考价值。
参考技术A 一、JSON解析到结构体在介绍这部分之前先简要介绍一下Json语法
JSON 语法是 javascript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。
数据在名称/值对中
数据由逗号分隔
大括号保存对象
中括号保存数组
1.JSON名称/值对
2.JSON值
可以是:
JSON数据
JSON 数字可以是整型或者浮点型
JSON对象
JSON 对象在大括号()中书写:
对象可以包含多个名称/值对:
JSON数组
JSON 数组在中括号中书写:
数组可包含多个对象:
JSON布尔值
二、JSON转map
输出结果:
三、生成JSON
本文来自php中文网的 golang教程 栏目: https://www.php.cn/be/go/
(三十八)golang--json(对切片map结构体进行序列化)
JSON(javascript object notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。key-val
JSON是在2001年开始推广的数据格式,目前已成为主流的数据格式。
JSON易于机器解析和生成,并有效地提升网络传输效率。通常程序在网络传输时会先将数据(结构体、map)等序列化成json字符串,到接收方得到json数据时,再反序列化恢复成原来的数据类型。这种方式已成为各个语言的标准。
要解析成json格式,struct里面的字段必须大写!!!不然解析出来的是{}
因为Json包相当于一个外包,字段大写才能被其调用。。。
package main import ( "encoding/json" "fmt" ) type monster struct { Name string Age int Birthday string Sal float64 Skill string } func testStruct() { m := monster{ Name: "牛魔王", Age: 10, Birthday: "1994-09-18", Sal: 10000.0, Skill: "牛魔拳", } //序列化 data, err := json.Marshal(&m) if err != nil { fmt.Println("序列化失败,error=", err) } fmt.Printf("序列化之后的结果:%v\\n", string(data)) } func testMap() { var a map[string]interface{} a = make(map[string]interface{}) a["name"] = "孙悟空" a["age"] = 20 a["address"] = "水帘洞" a["skill"] = "七十二变" data, err := json.Marshal(a) if err != nil { fmt.Println("序列化失败,error=", err) } fmt.Printf("序列化之后的结果:%v\\n", string(data)) } func testSlice() { var slice []map[string]interface{} var m1 map[string]interface{} m1 = make(map[string]interface{}) m1["name"] = "孙悟空" m1["age"] = 20 m1["address"] = "水帘洞" m1["skill"] = [2]string{"七十二变", "如意金箍棒"} slice = append(slice, m1) var m2 map[string]interface{} m2 = make(map[string]interface{}) m2["name"] = "猪八戒" m2["age"] = 30 slice = append(slice, m2) data, err := json.Marshal(slice) if err != nil { fmt.Println("序列化失败,error=", err) } fmt.Printf("序列化之后的结果:%v\\n", string(data)) } func testFloat64() { var a float64 a = 0.987 data, err := json.Marshal(a) if err != nil { fmt.Println("序列化失败,error=", err) } fmt.Printf("序列化之后的结果:%v\\n", string(data)) } func main() { testStruct() testMap() testSlice() testFloat64() }
要想序列化成小写的,只需要用tag指定即可:
对普通数据类型进行序列化是没意义的,只是相当于转换成string类型。
以上是关于golang生成JSON及解析JSON的主要内容,如果未能解决你的问题,请参考以下文章