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格式是否正确
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))
切片序列化代碼:
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))
}
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)
}
說明:在反序列化一個json字元串時,要確定反序列化後的資料類型和原來序列化的資料類型一緻。