什么是class="superseo">json,全称javascript object notation 是一种轻量级的数据交换格式
易于人的阅读和编写,也易于机器解析和生产
总是 key-value 的格式来使用
是主流的数据传输格式
json:通常程序在网络传输的时候会先将数据(结构体,map等)序列化成json字符串,
到接收方得到json字符串的时候,再反序列化恢复成原来的数据结构体(结构体,map等)
这种方式已经成为各个语言的标准
web编程中的应用,
package main
import (
"encoding/json"
"fmt"
)
//"os"
//"path/filepath"
func testMap() {
var a map[string]interface{} //就是说map的key是一个string类型,而value是interface空是任意类型
//怎么遍历map呢
// for key := range a{
// fmt.Println(one)
// }
// for _,value := range a{
// fmt.Println(value)
// }
a = make(map[string]interface{})
a["name"] = "红孩儿"
a["age"] = 30
a["address"] = "火云洞"
//进行序列化的代码
data, err := json.Marshal(a) //map本身就是指针类型,是按指针方式来传递的不用传地址
if err != nil {
fmt.Printf("序列化错误,err=%v\n", 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"] = 30
m1["address"] = "火云洞" //这里可以放数组进去,因为是interface{}
//比如 m1["address"] = [2]string{"火云洞","夏威夷"}
//********************************************
slice = append(slice, m1)
var m2 map[string]interface{}
m2 = make(map[string]interface{})
m2["name"] = "红孩儿2"
m2["age"] = 302
m2["address"] = "火云洞2"
slice = append(slice, m2)
//先看看没序列化是啥样的
fmt.Printf("序列化前的结果为,%v\n", slice)
data, err := json.Marshal(slice) //map本身就是指针类型,是按指针方式来传递的不用传地址
if err != nil {
fmt.Printf("序列化错误,err=%v\n", err)
}
fmt.Printf("序列化后的结果为,%v\n", string(data))
//序列化后是一个数组
//[{"address":"火云洞","age":30,"name":"红孩儿"},{"address":"火云洞2","age":302,"name":"红孩儿2"}]
//序列化前的结果为,[map[address:火云洞 age:30 name:红孩儿] map[address:火云洞2 age:302 name:红孩儿2]]
//序列化后的结果为,[{"address":"火云洞","age":30,"name":"红孩儿"},{"address":"火云洞2","age":302,"name":"红孩儿2"}]
}
//对基本数据类型进行序列化
//对基本类型进行序列化,意义不大,
func testFloat64() {
var num1 float64 = 2345.67
//对num1进行序列化
data, err := json.Marshal(num1)
if err != nil {
fmt.Printf("序列化错误err=%v\n", err)
}
//输出序列化后的结果
fmt.Printf("num1序列化后=%v\n", string(data))
}
type Monster struct {
Name string `json:"monster_name"` //这里是反引号,不是单引号,反引号在键盘的左上角
Age int `json:"monster_age"` //这叫反射机制,这样序列化后的结果的key就变成了自定义的
Birthday string
Sal int
Skill string
}
func testStruct() {
monster := Monster{
Name: "牛魔王",
Age: 10,
Birthday: "jintian",
Sal: 12,
Skill: "daquan",
}
data, err := json.Marshal(monster) //因为Marshal是另外一个包,即json包的方法,所以字段名字首字母大写
if err != nil {
fmt.Printf("序列化错误err=%v\n", err)
}
//输出序列化后的结果
fmt.Printf("num1序列化后=%v\n", string(data))
}
func main() {
// 什么是json,全程javascript object notation 是一种轻量级的数据交换格式
// 易于人的阅读和编写,也易于机器解析和生产
// 总是 key-value 的格式来使用
// 是主流的数据传输格式
// json:通常程序在网络传输的时候会先将数据(结构体,map等)序列化成json字符串,
// 到接收方得到json字符串的时候,再反序列化恢复成原来的数据结构体(结构体,map等)
// 这种方式已经成为各个语言的标准
// web编程中的应用,
//testMap()
testSlice()
testFloat64()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)