English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Go hat eine eingebaute Unterstützung für JSON-Kodierung und Dekodierung. Es unterstützt auch benutzerdefinierte Datentypen.
Die Marshal-Funktion wird verwendet, um go-Datentypen in das JSON-Format zu konvertieren.
Die Syntax der Marshal-Funktion ist:
"func Marshal(v interface{}) ([]byte, error)"
Marshal gibt die JSON-Kodierung von v zurück.
Boolsche Werte werden in JSON-Boolsche Werte umgewandelt. Fließkomma, Ganzzahlen und Zahlen werden in JSON-Zahlen umgewandelt. Die Schlüsseltypen von Maps müssen Zeichenfolgen, Ganzzahlen oder Implementierungen von encoding.TextMarshaler sein.
Die Dekodierung von JSON wird durch die Unmarshal-Funktion durchgeführt.
Die Syntax der Unmarshal-Funktion ist:
"func Unmarshal(data []byte, v interface{}) error"
Unmarshal decodiert den JSON-kodierten Wert und speichert das Ergebnis im auf v zeigenden Wert. Wenn v nil ist oder kein Zeiger ist, gibt Unmarshal InvalidUnmarshalError zurück.
我们还可以自定义存储在struct字段标签中“ json”键下的字段。我们可以使用该字段的名称,然后是逗号分隔的选项列表。
Field int 'json:"myName"' // 在JSON中显示为键“ myName”。 Field int 'json:"myName,omitempty?'//如果该字段的值为空,则从该对象中省略该字段, Field int 'json:"-"' ////字段被这个包忽略。
package main import "encoding/json" import "fmt" func main() { bolType, _ := json.Marshal(false) //布尔值 fmt.Println(string(bolType)) intType, _ := json.Marshal(10) // 整数值 fmt.Println(string(intType)) fltType, _ := json.Marshal(3.14) //浮点值 fmt.Println(string(fltType)) strType, _ := json.Marshal("w3codebox") // 字符串值 fmt.Println(string(strType)) slcA := []string{"sun", "moon", "star"} //切片值 slcB, _ := json.Marshal(slcA) fmt.Println(string(slcB)) mapA := map[string]int{"sun": 1, "moon": 2} //map值 mapB, _ := json.Marshal(mapA) fmt.Println(string(mapB)) }
Ausgabe:
false 10 3.14 "w3codebox" ["sun","moon","star"] {"moon":2,"sun":1}
package main import ( "encoding/json" "fmt" "os" ) type Response1 struct { Position int Planet []string } type Response2 struct { Position int 'json:"position"' Planet []string 'json:"planet"' } func main() { res1A := &Response1{ Position: 1, Planet: []string{"mercury", "venus", "earth"}} res1B, _ := json.Marshal(res1A) fmt.Println(string(res1B)) res2D := &Response2{ Position: 1, Planet: []string{"mercury", "venus", "earth"}} res2B, _ := json.Marshal(res2D) fmt.Println(string(res2B)) byt := []byte('{"pi":6.13, "place":["New York","New Delhi"]}`) var dat map[string]interface{} if err := json.Unmarshal(byt, &dat); err != nil { panic(err) } fmt.Println(dat) num := dat["pi"].(float64) fmt.Println(num) strs := dat["place"].([]interface{}) str1 := strs[0].(string) fmt.Println(str1) str := `{"Position": 1, "Planet": ["mercury", "venus"]}` res := Response2{} json.Unmarshal([]byte(str), &res) fmt.Println(res) fmt.Println(res.Planet[1}) enc := json.NewEncoder(os.Stdout) d := map[string]string{"1: "Merkur" , "2: "Venus"} enc.Encode(d) }
Ausgabe:
{"Position":1,"Planet":["mercury","venus","earth"]} {"position":1,"Planet":["mercury","venus","earth"]} Karte[pi:6.13 Ort:[New York New Delhi]] 6.13 New York {1 [Merkur Venus]} Merkur {"1"mercury","2:"venus"