Inhaltsverzeichnis
Das Golang-Codierungs- / JSON-Paket enthält zwei Funktionen, Marshal und Unmarshal, mit denen Daten im Json-Format codiert bzw. decodiert (analysiert) werden.
1. Codierung: func Marschall
func Marshal (v Schnittstelle {}) ([] Byte, Fehler)
Funktion: Geben Sie die von v codierten Json-Daten zurück. Beachten Sie, dass es sich um [] Byte handelt, zum Beispiel:
package main
import (
"encoding/json"
"fmt"
)
type Students struct {
Name string `Json:"name"`
Height int `Json:"height"`
Sex string `Json:"sex"`
}
type Teachers struct {
Name string `Json:"name"`
Height int `Json:"height"`
Sex string `Json:"sex"`
}
type School struct {
Name string `Json:"name"`
Area int `Json:"area"`
Student []Students `Json:"student"`
Teacher []Teachers `Json:"teacher"`
}
//initAssignment 初始化School
func initAssignment() School {
student := []Students{
{"张三", 180, "男"},
{"王丽", 165, "女"},
}
teacher := []Teachers{
{"李四", 180, "女"},
{"王五", 177, "男"},
}
school := School{"中关村大学", 1024, student, teacher}
return school
}
func main() {
school := initAssignment()
schoolJson, err := json.Marshal(school)
if err != nil {
fmt.Println("Umarshal Error:" + err.Error())
return
}
fmt.Println("schoolJson:", string(schoolJson))
}
Im obigen Beispiel gibt es drei Strukturen: Schule, Schüler und Lehrer. Unter diesen enthält die Schule die beiden letzteren, instanziiert einen Schultyp und konvertiert ihn in einen Json-Typ.
Ausgabe:
[root@localhost gotest]# go run main.go
schoolJson: {"Name":"中关村大学","Area":1024,"Student":[{"Name":"张三","Height":180,"Sex":"男"},{"Name":"王丽","Height":165,"Sex":"女"}],"Teacher":[{"Name":"李四","Height":180,"Sex":"女"},{"Name":"王五","Height":177,"Sex":"男"}]}
[root@localhost gotest]#
Dies ist nicht sehr intuitiv. Sehen Sie sich das folgende Formular an:
{
"Name": "中关村大学",
"Area": 1024,
"Student": [
{
"Name": "张三",
"Height": 180,
"Sex": "男"
},
{
"Name": "王丽",
"Height": 165,
"Sex": "女"
}
],
"Teacher": [
{
"Name": "李四",
"Height": 180,
"Sex": "女"
},
{
"Name": "王五",
"Height": 177,
"Sex": "男"
}
]
}
2. Analyse: func Unmarshal
func Unmarshal (Daten [] Byte, v Schnittstelle {}) Fehler
Funktion: Unmarshal analysiert die JSON-Daten und speichert das Ergebnis in v. Wenn v null oder kein Zeiger ist, gibt Unmarshal InvalidUnmarshalError zurück, zum Beispiel:
package main
import (
"encoding/json"
"fmt"
)
type Students struct {
Name string `Json:"name"`
Height int `Json:"height"`
Sex string `Json:"sex"`
}
type Teachers struct {
Name string `Json:"name"`
Height int `Json:"height"`
Sex string `Json:"sex"`
}
type School struct {
Name string `Json:"name"`
Area int `Json:"area"`
Student []Students `Json:"student"`
Teacher []Teachers `Json:"teacher"`
}
func main() {
var school School
strJson := `{"name":"中关村大学","area":1024,"student":[{"name":"张三","height":180,"sex":"男"},{"name":"王丽","height":165,"sex":"女"}],"teacher":[{"name":"李四","height":180,"sex":"女"},{"name":"王五","height":177,"sex":"男"}]}`
err := json.Unmarshal([]byte(strJson), &school) //注意:第二个参数需要传递地址
if err != nil {
fmt.Println("Umarshal Error:" + err.Error())
return
}
fmt.Printf("%#v\n", school)
fmt.Println(school.Name, school.Area)
}
Ausgabe:
[root@localhost gotest]# go run main.go
main.School{Name:"中关村大学", Area:1024, Student:[]main.Students{main.Students{Name:"张三", Height:180, Sex:"男"}, main.Students{Name:"王丽", Height:165, Sex:"女"}}, Teacher:[]main.Teachers{main.Teachers{Name:"李四", Height:180, Sex:"女"}, main.Teachers{Name:"王五", Height:177, Sex:"男"}}}
中关村大学 1024
[root@localhost gotest]#
Hierbei ist zu beachten, dass der erste Buchstabe des Variablennamens in der Struktur groß geschrieben werden sollte, damit andere Pakete auf die Variable der Struktur zugreifen können. Sie können die entsprechende Variable in Json analysieren, indem Sie nach der Variablen "Json:" Variablenname "" hinzufügen .
Referenzlink: