Wie konvertiert man eine Go-Struktur in JSON

Suraj Joshi 30 Januar 2023
  1. Go-Struktur in JSON konvertieren
  2. Verschachtelte Strukte in Go zu JSON konvertieren
  3. Einrückung in der Struktur zur JSON-Konvertierung in Go
Wie konvertiert man eine Go-Struktur in JSON

JSON ist ein leichtgewichtiges, sprachunabhängiges Format zum Speichern und Transportieren von Daten. In Go haben wir das Paket encoding/json, das viele eingebaute Methoden für JSON-bezogene Operationen enthält. Wir können Strukturdaten mittels Marshaling in JSON konvertieren.

Go-Struktur in JSON konvertieren

Die marshal-Methode empfängt ein Strukturobjekt und gibt eine Byte-Scheibe der kodierten Daten zurück, die wir in Go in JSON ändern können.

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Name   string `json:"empname"`
    Number int    `json:"empid"`
}

func main() {
    employee_1 := &Employee{Name: "Dixya Lhyaho", Number: 10}
    e, err := json.Marshal(employee_1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(e))
}

Ausgabe:

{"empname":"Dixya Lhyaho","empid":10}

Wenn wir die Number-Eigenschaft in number ändern, wird number nun im Marshal-Prozess ignoriert, da das json/encoding-Paket es nicht sehen kann.

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Name   string `json:"empname"`
    number int    `json:"empid"`
}

func main() {
    employee_1 := &Employee{Name: "Dixya Lhyaho", number: 10}
    e, err := json.Marshal(employee_1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(e))
}

Ausgabe:

{"empname":"Dixya Lhyaho"}

Verschachtelte Strukte in Go zu JSON konvertieren

Lassen Sie uns eine komplexere Struktur mit verschachtelter Struktur definieren. Innerhalb der Definition der Struktur definieren wir die JSON-Tags, die die Felder unserer Structs direkt auf die Felder in unserem Marshaled JSON abbilden.

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Position string `json:"position"`
    Name     Name   `json:"name"`
}

type Name struct {
    FirstName string `json:"firstname"`
    Surname   string `json:"surname"`
}

func main() {
    name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
    employee := Employee{Position: "Senior Developer", Name: name}

    byteArray, err := json.Marshal(employee)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(byteArray))
}

Ausgabe:

{"position":"Senior Developer","name":{"firstname":"Dikxya","surname":"Lhyaho"}}

Einrückung in der Struktur zur JSON-Konvertierung in Go

Wir können die Funktion json.MarshalIndent() anstelle der Funktion json.Marshal() verwenden, um JSON in einem besser lesbaren Format zu drucken. Wir übergeben zwei zusätzliche Argumente, prefix string und die indent string an MarshalIndent.

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Position string `json:"position"`
    Name     Name   `json:"name"`
}

type Name struct {
    FirstName string `json:"firstname"`
    Surname   string `json:"surname"`
}

func main() {
    name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
    employee := Employee{Position: "Senior Developer", Name: name}

    byteArray, err := json.MarshalIndent(employee, "", "  ")
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(byteArray))
}

Ausgabe:

{
  "position": "Senior Developer",
  "name": {
    "firstname": "Dikxya",
    "surname": "Lhyaho"
  }
}
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Verwandter Artikel - Go JSON

Verwandter Artikel - Go Struct