Go 구조체를 JSON으로 변환하는 방법
    
    Suraj Joshi
    2023년1월30일
    
    Go
    Go JSON
    Go Struct
    
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 string과indent 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"
  }
}
        튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
    
작가: Suraj Joshi
    Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn