Go 구조체를 JSON으로 변환하는 방법
Suraj Joshi
2023년1월30일
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"
}
}
작가: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn