天天看點

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格式是否正确

bpmn js 生成json_go語言學習筆記(27)-json序列化和反序列化

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))
           
bpmn js 生成json_go語言學習筆記(27)-json序列化和反序列化

切片序列化代碼:

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))


}
           
bpmn js 生成json_go語言學習筆記(27)-json序列化和反序列化

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)
}		
           
bpmn js 生成json_go語言學習筆記(27)-json序列化和反序列化

說明:在反序列化一個json字元串時,要確定反序列化後的資料類型和原來序列化的資料類型一緻。