bpmn js 生成json_go语言学习笔记(27)-json序列化和反序列化

json基本介绍

JSON(JavaScriptObject Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 是一种轻量级的数据交换格式(key-val),易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在网络传输时会先将数据(结构体、map等)序列化成json字符串,到接收方得到json字符串时,再反序列化恢复成原来的数据类型(结构体、map等)

go语言 ---序列化---》 json字符串---网络传输---》程序---反序列化---》其他语言

在js语言中,一切皆为对象。因此,任何数据类型都可以通过json来表示,例如字符串、数字、数组、map、结构体等

JSON 是用 键值对 的形式来保存数据。

比如:

【“name”: "tom”】 // [ key : val]

【“name”: "tom”, "age" : 16 , "num" : 6】

//[ key : val,key2 : val,key3 : val,key4 : val]

json数据在线解析

www.json.cn 网站可以验证一个json格式是否正确

96129f4a6bf5021a1eb592658e6d6004.png

json序列化

json序列化是将有 key-value 结构的数据类型(比如 结构体 map 切片)序列化成json字符串的操作。

map序列化代码:

var a map[string]interface{}
a = make(map[string]interface{}) 
a["num"] = 3
a["name"] = "tom"
  
  jsonStr, err := json.Marshal(a)
    if err != nil {
		fmt.Println("json 处理错误", err)
	}
	fmt.Println("jsonStr",string(jsonStr))

03f75bcd35ea2fd190812b089f4369c8.png

切片序列化代码:

func testSlice(){
	var slice []map[string]interface{}
	var m map[string]interface{}
	m = make(map[string]interface{}) 
	m["num"] = 6
	m["name"] = "jack"
	slice = append(slice,m)
	var m2 map[string]interface{}
	m2 = make(map[string]interface{}) 
	m2["num"] = 30
	m2["name"] = "sober"
	slice = append(slice,m2)
	jsonStr, err := json.Marshal(slice)
    if err != nil {
		fmt.Println("json 处理错误", err)
	}
	fmt.Println("slice 序列化",string(jsonStr))


}

39e4abc04f3442434e6ffb1d8a6b6e8e.png

json反序列化

json反序列化,将json字符串反序列化成对应的数据类型(比如结构体、map、切片等)的操作。

将str中json格式语句反序列化

package main
import ( 
"fmt"
"encoding/json"
)
type Person struct{
	 Num int  //` json:"num" `
	Name string //`json:"name"`
}


func main() {
 str := "{"Num":666,"Name":"tom"}"
 var person Person
 err := json.Unmarshal([]byte(str),&person)
 if err != nil{
	 fmt.Printf("unmarshal err = %vn",err)
 }
 fmt.Printf("反序列化后  = %vn",person)
}		

367bf829b718114ae4edaa430071cf31.png

说明:在反序列化一个json字符串时,要确保反序列化后的数据类型和原来序列化的数据类型一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值