Was dieses Werkzeug tut
Aus einer JSON-Probe werden Go-Structs, eines je Objekt.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
type Root struct {
Id int `json:"id"`
FirstName string `json:"firstName"`
Address Address `json:"address"`
}
type Address struct {
City string `json:"city"`
}
Die Spalten sind so ausgerichtet, wie gofmt sie ausrichtet — Name, Typ, Tag. Niemand liest unformatiertes Go, und dies in eine Datei zu kleben und gofmt laufen zu lassen sollte nichts ändern.
Diese Ausrichtung ist neu: die Felder kamen bisher durch ein einzelnes Leerzeichen getrennt heraus. Eine Kleinigkeit — und doch eine Ausgabe, die nicht nach der Sprache aussah, auf die sie sich beruft.
Namen sind exportiert, Schlüssel leben im Tag
encoding/json übergeht nicht exportierte Felder vollständig: ein kleingeschriebenes Feld dekodiert nichts und kodiert nichts, ohne ein Wort. Darum ist jedes Feld exportiert — PascalCase, mit einem F davor, wenn der Schlüssel mit einer Ziffer beginnt (2fa ergibt F2fa) — und der Tag trägt den Schlüssel unverändert.
Zwei Schlüssel, die denselben Go-Namen ergeben — user-name und userName —, werden durch ein nummeriertes Suffix getrennt. Die Tags bleiben verschieden, also gehört jedes Feld weiterhin zu seinem eigenen Schlüssel.
omitempty lässt mehr weg, als man denkt
Die Option hängt ,omitempty an jeden Tag. Sie wirkt nur beim Kodieren und unterscheidet „fehlend“ nicht von „null“: 0, "", false, ein leerer Slice und eine nil-Map verschwinden alle aus der Ausgabe.
Für einen optionalen Filter ist das richtig, für eine Punktzahl, die legitim null sein darf, falsch. Wo der Unterschied zählt, ist ein Zeiger die übliche Antwort — *int —, der für nil null kodiert und sonst eine echte 0.
Typen, und was eine Probe nicht sagen kann
- Ganzzahlen werden
int, nichtint64. Auf jeder 64-Bit-Plattform ist das dasselbe; ein Wert darüber scheitert beim Dekodieren laut, statt still abgeschnitten zu werden. nullund unbekannte Werte werdenany. Ein leeres Array wird[]any, ein gemischtes auch, außer es mischt Ganzzahlen und Fließkommazahlen — dann deckt[]float64beide ab.- Kein Feld ist ein Zeiger und keines optional, denn eine Probe kann das nicht zeigen. Ein manchmal fehlender Schlüssel ist ein
*T, das Sie selbst ergänzen — und das Erste, was sich gegen eine zweite Nutzlast prüfen lässt.
Datenschutz ab Werk
Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.