本文共 2270 字,大约阅读时间需要 7 分钟。
JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成。尽管JSON是JavaScript的一个子集,但JSON采用完全独立于编程语言的文本格式,且表现为键/值对集合的文本描述形式(类似一些编程语言中的字典结构),这使它成为较为理想的、跨平台、跨语言的数据交换语言。
开发者可以用 JSON 传输简单的字符串、数字、布尔值,也可以传输一个数组,或者一个更复杂的复合结构。在 Web 开发领域中, JSON被广泛应用于 Web 服务端程序和客户端之间的数据通信。
Go语言内建对JSON的支持。使用Go语言内置的encoding/json 标准库,开发者可以轻松使用Go程序生成和解析JSON格式的数据。
JSON官方网站:
在线格式化:
使用json.Marshal()函数可以对一组数据进行JSON格式的编码。
func Marshal(v interface{}) ([]byte, error)
MarshalIndent 很像 Marshal,只是用缩进对输出进行格式化
func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
package mainimport ( "encoding/json" "fmt")type IT struct{ Name string Company string Subjects []string IsOk bool Price float64}func main() t1 := IT{"Ternence Hsu","Google", []string{"Go", "C++", "Python", "Test"}, true,666.666} //生成一段JSON 格式的文本 //如果编码成功, err 将赋于零值 nil,变量b 将会是一个进行JSON 格式化之后的[]byte 类型 b1, err := json.Marshal(t1) if err != nil { fmt.Println("json err:", err) } // 用缩进对输出进行格式化 b2, err := json.MarshalIndent(t1, "", " ") if err != nil { fmt.Println("json err:", err) } fmt.Println(string(b1)) fmt.Println(string(b2))} /* b1输出结果: {"Name":"Ternence Hsu","Company":"Google","Subjects":["Go","C++","Python","Test"],"IsOk":true,"Price":666.666} b2 输出结果: { "Name":"Ternence Hsu", "Company":"Google", "Subjects":[ "Go", "C++", "Python", "Test" ], "IsOk":true, "Price":666.666 } */
使用json.Unmarshal()函数将JSON格式的文本解码为Go里面预期的数据结构
func Unmarshal(data []byte, v interface{}) error
package mainimport ( "encoding/json" "fmt")type IT struct { Name string `json:"name"` Company string `json:"company"` Subjects []string `json:"subjects"` IsOk bool `json:"isok"` Price float64 `json:"price"`} func main() { b := []byte(`{ "name": "Ternence Hsu", "company": "Google", "subjects": [ "Go", "C++", "Python", "Test" ], "isok": true, "price": 666.666}`) var t IT err := json.Unmarshal(b, &t) if err != nil { fmt.Println("json err:", err) } fmt.Println(t) //运行结果:{Ternence Hsu Google [Go C++ Python Test] true 666.666} //只想要Subjects字段 type IT2 struct { Subjects []string `json:"subjects"` } var t2 IT2 err = json.Unmarshal(b, &t2) if err != nil { fmt.Println("json err:", err) } fmt.Println(t2) //运行结果:{[Go C++ Python Test]}}