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

  1. Go 구조체를 JSON으로 변환
  2. Go에서 Nested Structs를 JSON으로 변환
  3. Go에서 Struct에서 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"
  }
}

관련 문장 - Go Struct