encoding/json.Valid în Go

Verifică doar dacă textul este JSON valid, fără să-l citească într-o variabilă.

Sintaxă
func Valid(data []byte) bool

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 Valid să verifice și forma (ce câmpuri are obiectul). Verifică doar sintaxa; pentru câmpuri folosește Unmarshal î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.