Ce face encoding/json.Valid
json.Valid(date) returnează true dacă date este exact o valoare JSON corectă (obiect, listă, text, număr, true, false sau null), eventual cu spații în jur. Nu alocă structuri, deci este rapid.
Este util înainte să salvezi JSON primit ca text (într-o coloană MySQL de tip JSON, într-un fișier) sau în teste. Dacă oricum faci Unmarshal, nu e nevoie de Valid: eroarea lui Unmarshal spune și unde este problema.
Parametri
| Parametru | Descriere |
|---|---|
data |
Textul de verificat. |
Ce returnează
true sau false.
Exemple
Exemplul 1: Ce este și ce nu este JSON valid
package main
import (
"encoding/json"
"fmt"
)
func main() {
texte := []string{
`{"nume": "Ana", "nota": 10}`,
`[1, 2, 3]`,
`"doar un text"`,
`42`,
`null`,
`{'nume': 'Ana'}`,
`{"nume": "Ana",}`,
`{nume: "Ana"}`,
`{"a": 1} {"b": 2}`,
``,
}
for _, t := range texte {
eticheta := t
if t == "" {
eticheta = "(text gol)"
}
fmt.Printf("%-24s %v\n", eticheta, json.Valid([]byte(t)))
}
}
Rezultat
{"nume": "Ana", "nota": 10} true
[1, 2, 3] true
"doar un text" true
42 true
null true
{'nume': 'Ana'} false
{"nume": "Ana",} false
{nume: "Ana"} false
{"a": 1} {"b": 2} false
(text gol) false
Exemplul 2: Verificare înainte de salvare
package main
import (
"encoding/json"
"errors"
"fmt"
)
func salveazaPreferinte(utilizator string, preferinte []byte) error {
if !json.Valid(preferinte) {
return errors.New("preferințele nu sunt JSON valid")
}
fmt.Printf("Salvez pentru %s: %s\n", utilizator, preferinte)
return nil
}
func main() {
fmt.Println(salveazaPreferinte("ana", []byte(`{"tema":"intunecata","limba":"ro"}`)))
fmt.Println(salveazaPreferinte("ion", []byte(`{"tema":intunecata}`)))
}
Rezultat
Salvez pentru ana: {"tema":"intunecata","limba":"ro"}
<nil>
preferințele nu sunt JSON valid
Greșeli frecvente
- Te aștepți ca
Validsă verifice și forma (ce câmpuri are obiectul). Verifică doar sintaxa; pentru câmpuri foloseșteUnmarshalîntr-o structură și verifică valorile.
Comenzi înrudite
encoding/json.Unmarshal: Citește JSON și completează o valoare Go (structură, map, slice) dată prin pointer; potrivește cheile după etichetele json.encoding/json.Indent: Reformatează un text JSON existent: Indent îl aranjează pe rânduri, Compact elimină spațiile inutile.