Go Academy · Lektion

JSON-taggar

Styr marshaling

Lektion 2 av 413 steg

JSON-taggar är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Go Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Go Academy innehåller totalt 4 lektioner.

JSON-taggar styr marshaling

Paketet encoding/json använder json-taggar för att bestämma nyckelnamn och regler när structar konverteras till och från JSON.

Standardnamn för fält

Utan taggar matchar JSON-nycklarna exakt de exporterade fältnamnen, inklusive versaler och gemener.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := json.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

Byta namn på nycklar

En json-tagg ändrar nyckelns namn i utdatan. Här blir Name det gemena namnet.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
	Age  int    "json:\"age\""
}

func main() {
	b, _ := json.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

Alternativet omitempty

Lägg till ,omitempty för att utelämna ett fält från utdatan när det innehåller sitt nollvärde (tom sträng, 0, nil och så vidare).

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name  string "json:\"name\""
	Email string "json:\"email,omitempty\""
}

func main() {
	b, _ := json.Marshal(User{Name: "Ann"})
	fmt.Println(string(b))
}

Ignorera ett fält

En tagg med värdet - instruerar kodaren att hoppa över fältet helt, vilket är användbart för hemligheter som lösenord.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name     string "json:\"name\""
	Password string "json:\"-\""
}

func main() {
	b, _ := json.Marshal(User{"Ann", "secret"})
	fmt.Println(string(b))
}

Unmarshaling med taggar

Taggar fungerar åt båda hållen. När JSON avkodas anger taggen vilken JSON-nyckel som ska fylla vilket fält.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
}

func main() {
	var u User
	json.Unmarshal([]byte("{\"name\":\"Bob\"}"), &u)
	fmt.Println(u.Name)
}

Skiftlägesokänslig matchning

Vid unmarshaling matchar Go JSON-nycklar skiftlägesokänsligt mot taggar som en reservlösning. Att definiera taggar uttryckligen är ändå det säkra och tydliga valet.

Alternativet string

Alternativet ,string kodar ett numeriskt fält eller ett booleskt fält som en JSON-sträng. Det är användbart för system som förväntar sig tal inom citattecken.

package main

import (
	"encoding/json"
	"fmt"
)

type Item struct {
	ID int "json:\"id,string\""
}

func main() {
	b, _ := json.Marshal(Item{ID: 42})
	fmt.Println(string(b))
}

Kombinera alternativ

Du kan kombinera ett namn med alternativ: json:"email,omitempty". Namnet kommer först och följs av kommaseparerade alternativ.

Oexporterade fält hoppas över

Endast exporterade fält (med stor begynnelsebokstav) marshallas. Ett fält med gemener är osynligt för encoding/json, oavsett vilken tagg det har.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
	age  int
}

func main() {
	b, _ := json.Marshal(User{Name: "Ann", age: 30})
	fmt.Println(string(b))
}

Läsbar utdata

json.MarshalIndent formaterar JSON med indrag, vilket är praktiskt för lättlästa loggar samtidigt som taggarna respekteras.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
}

func main() {
	b, _ := json.MarshalIndent(User{"Ann"}, "", "  ")
	fmt.Println(string(b))
}

Snabbtest

Vad gör alternativet ,omitempty i en json-tagg?

Sammanfattning

JSON-taggar styr serialiseringen:

  • Byt namn på nycklar med json:"name"
  • ,omitempty hoppar över nollvärden
  • - ignorerar ett fält; ,string omger tal med citattecken
  • Endast exporterade fält kodas
Gratis att börja

Lär dig Go med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”JSON-taggar” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”JSON-taggar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Go Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”JSON-taggar”?

Styr marshaling Ni övar på Go Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Go Academy?

Du behöver inga förkunskaper. Utbildningen i Go Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”JSON-taggar”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Go Academy-lektionen?

Ja. Varje Go Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Vad är struct-taggar
  2. JSON-taggar
  3. Valideringsbibliotek
  4. Anpassad taggtolkning
← Tillbaka till Go Academy