Go 구조체를 JSON으로 변환하는 방법

Suraj Joshi 2023년1월30일
  1. Go 구조체를 JSON으로 변환
  2. Go에서 Nested Structs를 JSON으로 변환
  3. Go에서 Struct에서 JSON으로의 들여 쓰기 변환
Go 구조체를 JSON으로 변환하는 방법

JSON은 데이터 저장 및 전송을위한 간단한 언어 독립적 형식입니다. Go에는 JSON 관련 작업을위한 내장 메소드가 많이 포함 된encoding/json 패키지가 있습니다. 마샬링을 사용하여 구조체 데이터를 JSON으로 변환 할 수 있습니다.

Go 구조체를 JSON으로 변환

marshal 메소드는 struct 객체를 받아서 인코딩 된 데이터의 바이트 슬라이스를 반환합니다. Go에서 JSON으로 변경할 수 있습니다.

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))
}

출력:

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

Number 속성을number로 변경하면json/encoding 패키지에서 볼 수 없으므로 마샬링 프로세스에서number가 무시됩니다.

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))
}

출력:

{"empname":"Dixya Lhyaho"}

Go에서 Nested Structs를 JSON으로 변환

중첩 된 구조체로보다 복잡한 구조체를 정의합시다. 구조체의 정의 내에서 구조체의 필드를 마샬링 된 JSON의 필드에 직접 매핑하는 JSON 태그를 정의합니다.

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))
}

출력:

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

Go에서 Struct에서 JSON으로의 들여 쓰기 변환

JSON을 더 읽기 쉬운 형식으로 인쇄하기 위해json.Marshal()함수 대신json.MarshalIndent()함수를 사용할 수 있습니다. prefix stringindent string이라는 두 개의 추가 인자를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))
}

출력:

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

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

LinkedIn

관련 문장 - Go JSON

관련 문장 - Go Struct