JSON ( JavaScript Object Notation, JS 对象简谱 ) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
可以使用 encodig/json 工具包来实现结构体和json数据的转换 :
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
}
func main() {
var p1 = Person{
"John",
30,
}
// 使用 json.Marshal 函数将结构体转换为 byte 类型的字符数据
jsonByte, _ := json.Marshal(p1)
// 使用 string 将字符转换为字符串
fmt.Println(string(jsonByte))
}
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
}
func main() {
// 定义字符串
var personJson = `{"ame":"John","Age":30}`
// 初始化空结构体
var person Person
// 将字符串转换为结构体 注意利用地址方式赋值给结构体
err := json.Unmarshal([]byte(personJson), &person)
if err != nil {
fmt.Printf("error: %v", err)
} else {
fmt.Printf("%#v", person)
}
}
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string "json:\"name\""
Age int "json:\"age\""
}
func main() {
// 定义字符串
var personJson = `{"name":"John","age":30}`
// 初始化空结构体
var person Person
// 将字符串转换为结构体 注意利用地址方式赋值给结构体
err := json.Unmarshal([]byte(personJson), &person)
if err != nil {
fmt.Printf("error: %v", err)
} else {
fmt.Printf("%#v", person)
}
}
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Name string "json:\"name\""
Age int "json:\"age\""
}
type Class struct {
Name string "json:\"name\""
Students []Student "json:\"students\""
}
func main() {
var classFive Class = Class{}
classFive.Name = "一年级五班"
classFive.Students = append(classFive.Students, Student{Name: "张三", Age: 18})
classFive.Students = append(classFive.Students, Student{Name: "李四", Age: 19})
classFive.Students = append(classFive.Students, Student{Name: "王五", Age: 20})
jsonByte, err := json.Marshal(classFive)
if err != nil {
println(err)
} else {
fmt.Println(string(jsonByte))
}
// 将字符串转换为结构体
var jsonStr string = `{"name":"一年级五班","students":[{"name":"张三","age":18},{"name":"李四","age":19},{"name":"王五","age":20}]}`
var classSix Class = Class{}
err2 := json.Unmarshal([]byte(jsonStr), &classSix)
if err2 != nil {
println(err2)
} else {
fmt.Println(classSix.Name)
for _, student := range classSix.Students {
fmt.Println(student.Name, student.Age)
}
}
}