English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang Grundtutorials

Golang Steuerausdrücke

Golang Funktion & Methode

Golang Struktur

Golang Schnittmenge & Array

Golang Zeichenkette (String)

Golang Zeiger

Golang Schnittstelle

Golang Parallelität

Golang Ausnahmen (Error)

Golang andere Artikel

Go Sprache JSON

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:"-"' ////字段被这个包忽略。

Go JSON示例1

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}

Go JSON示例2(用户定义的数据类型)

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"