Ce face encoding/json.Indent
Spre deosebire de MarshalIndent, care pornește de la o valoare Go, json.Indent pornește de la un text JSON gata făcut (de exemplu răspunsul unui API) și scrie în dst varianta indentată. Ordinea cheilor și valorile rămân exact cum erau.
json.Compact face invers: elimină toate spațiile și rândurile noi care nu fac parte din texte, pentru stocare sau transmitere. Ambele returnează eroare dacă textul nu este JSON valid. Rezultatul se scrie într-un bytes.Buffer, pe care îl citești cu buf.String() sau buf.Bytes().
Parametri
| Parametru | Descriere |
|---|---|
dst |
Bufferul în care se scrie rezultatul (se adaugă la ce conține deja). |
src |
JSON-ul de reformatat. |
prefix, indent |
Ca la MarshalIndent (doar la Indent). |
Ce returnează
nil sau o eroare de sintaxă.
Exemple
Exemplul 1: Aranjarea unui răspuns primit
package main
import (
"bytes"
"encoding/json"
"fmt"
)
func main() {
raspuns := []byte(`{"oras":"Iași","temperaturi":[14,16,11],"vant":{"viteza":12,"directie":"NV"}}`)
var buf bytes.Buffer
if err := json.Indent(&buf, raspuns, "", " "); err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
}
Rezultat
{
"oras": "Iași",
"temperaturi": [
14,
16,
11
],
"vant": {
"viteza": 12,
"directie": "NV"
}
}
Exemplul 2: Compact și eroare de sintaxă
package main
import (
"bytes"
"encoding/json"
"fmt"
)
func main() {
frumos := []byte(`{
"nume": "Ana Pop",
"note": [ 9, 10, 8 ],
"bursa": true
}`)
var buf bytes.Buffer
json.Compact(&buf, frumos)
fmt.Println(buf.String())
fmt.Println(len(frumos), "->", buf.Len(), "octeți")
buf.Reset()
err := json.Compact(&buf, []byte(`{"nume": "Ana",}`))
fmt.Println("Eroare:", err)
}
Rezultat
{"nume":"Ana Pop","note":[9,10,8],"bursa":true}
70 -> 47 octeți
Eroare: invalid character '}' looking for beginning of object key string
Greșeli frecvente
- Refolosești bufferul fără
Reset(): rezultatul nou se adaugă după cel vechi. - Folosești
Indentpe o valoare Go: primește text JSON. Pentru valori foloseșteMarshalIndent.
Comenzi înrudite
encoding/json.MarshalIndent: Ca Marshal, dar scrie JSON-ul pe mai multe rânduri, indentat, ușor de citit (fișiere de configurare, afișare).encoding/json.Valid: Verifică doar dacă textul este JSON valid, fără să-l citească într-o variabilă.encoding/json.NewEncoder: Creează un Encoder care scrie JSON direct într-un io.Writer (răspuns HTTP, fișier, ecran); Encode scrie o valoare.