Ripasso di encoding/json
Eseguire il marshal e l'unmarshal di JSON
Ripasso di encoding/json è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
JSON in Go
JSON è il formato dati più comune per le API. Il pacchetto standard di Go encoding/json converte i valori Go in testo JSON e viceversa.
Marshal: da Go a JSON
json.Marshal converte un valore Go in uno slice di byte JSON. È possibile convertirlo in una stringa per stamparlo.
package main
import (
"encoding/json"
"fmt"
)
func main() {
data := map[string]int{"a": 1, "b": 2}
b, _ := json.Marshal(data)
fmt.Println(string(b))
}Serializzazione di una struct
Le struct vengono serializzate campo per campo. I campi esportati diventano chiavi JSON.
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))
}Unmarshal: da JSON a Go
json.Unmarshal analizza i byte JSON e li inserisce in un valore Go. Passare un puntatore consente alla funzione di valorizzare la variabile.
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string
Age int
}
func main() {
var u User
json.Unmarshal([]byte("{\"Name\":\"Bob\",\"Age\":25}"), &u)
fmt.Println(u)
}Tag per i nomi delle chiavi
Usare i tag json per controllare i nomi delle chiavi, come illustrato in precedenza. In questo caso, Name corrisponde alla chiave JSON name.
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string "json:\"name\""
}
func main() {
b, _ := json.Marshal(User{"Ann"})
fmt.Println(string(b))
}Controllare sempre gli errori
Sia Marshal sia Unmarshal restituiscono un errore. Nel codice reale, non ignorarlo mai: JSON malformato o tipi non supportati producono errori.
package main
import (
"encoding/json"
"fmt"
)
func main() {
var v int
err := json.Unmarshal([]byte("not json"), &v)
fmt.Println(err)
}Decodifica nelle mappe
Quando non si conosce in anticipo la struttura dei dati, effettuare l'unmarshal in map[string]interface{}.
package main
import (
"encoding/json"
"fmt"
)
func main() {
var m map[string]interface{}
json.Unmarshal([]byte("{\"x\":1,\"y\":\"hi\"}"), &m)
fmt.Println(m["x"], m["y"])
}Slice e array
Gli array JSON corrispondono agli slice Go. La serializzazione di uno slice produce un array JSON.
package main
import (
"encoding/json"
"fmt"
)
func main() {
b, _ := json.Marshal([]string{"a", "b", "c"})
fmt.Println(string(b))
}Formattazione leggibile
json.MarshalIndent aggiunge l'indentazione per ottenere un output leggibile.
package main
import (
"encoding/json"
"fmt"
)
func main() {
data := map[string]int{"a": 1}
b, _ := json.MarshalIndent(data, "", " ")
fmt.Println(string(b))
}I numeri sono float64
Quando si esegue il decoding in interface{}, in Go tutti i numeri JSON diventano float64. Se serve un int, è necessario effettuare una conversione esplicita.
package main
import (
"encoding/json"
"fmt"
)
func main() {
var v interface{}
json.Unmarshal([]byte("42"), &v)
fmt.Printf("%T %v\n", v, v)
}Round trip
È possibile serializzare e poi deserializzare i dati per copiarli tramite JSON. Per i tipi supportati, i valori vengono recuperati intatti.
package main
import (
"encoding/json"
"fmt"
)
func main() {
orig := []int{1, 2, 3}
b, _ := json.Marshal(orig)
var back []int
json.Unmarshal(b, &back)
fmt.Println(back)
}Verifica rapida
Perché è necessario passare un puntatore a json.Unmarshal?
Riepilogo
encoding/json:
json.Marshalconverte i valori Go in JSONjson.Unmarshalanalizza il JSON usando un puntatore- I tag rinominano le chiavi; i numeri vengono decodificati come float64 in interface{}
- Controllare sempre l'errore restituito
Domande Frequenti
La lezione «Ripasso di encoding/json» è gratuita?
Sì — il testo completo di «Ripasso di encoding/json» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Ripasso di encoding/json»?
Eseguire il marshal e l'unmarshal di JSON Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Ripasso di encoding/json»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Ripasso di encoding/json
- encoding/xml
- encoding/csv
- gob e codifica binaria