JSON(JavaScript Object Notation)
是一種輕量級的數據交換格式,如今是主流的數據格式,經常使用於web
開發中前端與後端進行數據交互的一種方式前端
go
中常見的幾種序列化成json
的方式一、將結構體序列化成json
web
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Name string `json:"name"` // 姓名
Age int `json:"age"` // 年齡
Gender string `json:"gender"` // 性別
Score float64 `json:"score"` // 分數
Course []string `json:"course"` // 課程
}
func main() {
stu := Student{
"張三",
20,
"男",
78.6,
[]string{"語文", "數學", "音樂"},
}
fmt.Println(stu)
data, err := json.Marshal(&stu)
if err != nil {
fmt.Println("序列化錯誤", err)
} else {
fmt.Println(string(data))
}
}
// 返回結果:{"name":"張三","age":20,"gender":"男","score":78.6,"course":["語文","數學","音樂"]}
複製代碼
二、將map
序列化爲json
json
package main
import (
"encoding/json"
"fmt"
)
func main() {
var map1 map[string]interface{} // 使用一個空接口表示能夠是任意類型
map1 = make(map[string]interface{})
map1["name"] = "張三"
map1["province"] = "廣東省"
map1["city"] = "深圳市"
map1["salary"] = 1000
map1["hobby"] = [...]string{"看書", "旅遊", "學習"}
data, err := json.Marshal(map1)
if err != nil {
fmt.Println("序列化失敗")
} else {
fmt.Println(string(data))
}
}
複製代碼
三、切片序列化成json
後端
package main
import (
"encoding/json"
"fmt"
)
func main() {
var slice1 []map[string]interface{}
var m1 map[string]interface{}
m1 = make(map[string]interface{})
m1["name"] = "張三"
m1["address"] = "廣東省深圳市"
slice1 = append(slice1, m1)
var m2 map[string]interface{}
m2 = make(map[string]interface{})
m2["name"] = "李四"
m2["address"] = "廣東省廣州市"
slice1 = append(slice1, m2)
data, err := json.Marshal(slice1)
if err != nil {
fmt.Println("序列化錯誤")
} else {
fmt.Println(string(data))
}
}
複製代碼
json
轉換爲go
代碼能識別的結構體、map
、切片)一、json
反序列化成結構體app
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Name string `json:"name"` // 姓名
Age int `json:"age"` // 年齡
Gender string `json:"gender"` // 性別
Score float64 `json:"score"` // 分數
Course []string `json:"course"` // 課程
}
func main() {
var stu Student
str := `{"name":"張三","age":20,"gender":"男","score":78.6,"course":["語文","數學","音樂"]}`
err := json.Unmarshal([]byte(str), &stu)
if err != nil {
fmt.Println("反序列化失敗")
}
fmt.Println(stu)
}
複製代碼
二、json
反序列化成map
學習
package main
import (
"encoding/json"
"fmt"
)
func main() {
var map1 map[string]interface{} // 使用一個空接口表示能夠是任意類型
//map1 = make(map[string]interface{})
str := `{"city":"深圳市","hobby":["看書","旅遊","學習"],"name":"張三","province":"廣東省","salary":1000}`
err := json.Unmarshal([]byte(str), &map1)
if err != nil {
fmt.Println("反序列化失敗", err)
}
fmt.Println(map1)
}
複製代碼
三、切片反序列化ui
package main
import (
"encoding/json"
"fmt"
)
func main() {
var slice []map[string]interface{}
str := `[{"address":"廣東省深圳市","name":"張三"},{"address":"廣東省廣州市","name":"李四"}]`
err := json.Unmarshal([]byte(str), &slice)
if err != nil {
fmt.Printf("unmarshal err=%v\n", err) }
fmt.Printf("反序列化後 slice=%v\n", slice)
}
複製代碼