什么是json json序列化的案例 javascript object notation

什么是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()
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值