안녕하세요. 오늘은 Golang을 사용하여 구조체와 JSON 데이터를 다루는 방법을 배워보겠습니다. Golang은 강력하고 효율적인 프로그래밍 언어로, JSON 데이터를 손쉽게 다룰 수 있습니다. 이 글에서는 구체적인 코드 예제를 제시하면서 구조체와 JSON 간의 상호 변환에 대해 알아보겠습니다.
구조체와 JSON 기본
먼저, 구조체와 JSON의 기본 사용법을 살펴보겠습니다. 아래는 샘플 구조체와 JSON 데이터입니다.
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email,omitempty"`
}
func main() {
// 구조체에서 JSON으로 인코딩
person := Person{Name: "John", Age: 30}
jsonData, err := json.Marshal(person)
if err != nil {
panic(err)
}
fmt.Println(string(jsonData))
// JSON에서 구조체로 디코딩
jsonStr := `{"name":"Alice","age":25}`
var newPerson Person
err = json.Unmarshal([]byte(jsonStr), &newPerson)
if err != nil {
panic(err)
}
fmt.Println(newPerson)
}
이 코드 예제에서는 Person
이라는 구조체를 정의하고, json
태그를 사용하여 필드 이름과 JSON 키를 연결하며, omitempty
를 사용하여 빈 필드를 무시할 수 있습니다.
JSON 작업 예제
이제 다양한 JSON 작업 예제를 살펴보겠습니다. 다음은 몇 가지 예시입니다.
1. JSON에서 특정 값을 가져오기
func getValueFromJSON(jsonData []byte, key string) interface{} {
var data map[string]interface{}
if err := json.Unmarshal(jsonData, &data); err != nil {
panic(err)
}
return data[key]
}
func main() {
jsonData := []byte(`{"name":"Bob","age":40,"email":"bob@example.com"}`)
name := getValueFromJSON(jsonData, "name").(string)
age := int(getValueFromJSON(jsonData, "age").(float64))
fmt.Printf("이름: %s, 나이: %d\n", name, age)
}
2. JSON에 새로운 데이터 추가하기
func addDataToJSON(jsonData []byte, key string, value interface{}) []byte {
var data map[string]interface{}
if err := json.Unmarshal(jsonData, &data); err != nil {
panic(err)
}
data[key] = value
newJSONData, err := json.Marshal(data)
if err != nil {
panic(err)
}
return newJSONData
}
func main() {
jsonData := []byte(`{"name":"Charlie","age":35}`)
newData := addDataToJSON(jsonData, "email", "charlie@example.com")
fmt.Println(string(newData))
}
3. JSON 데이터 일부 삭제하기
func removeDataFromJSON(jsonData []byte, key string) []byte {
var data map[string]interface{}
if err := json.Unmarshal(jsonData, &data); err != nil {
panic(err)
}
delete(data, key)
newJSONData, err := json.Marshal(data)
if err != nil {
panic(err)
}
return newJSONData
}
func main() {
jsonData := []byte(`{"name":"David","age":45,"email":"david@example.com"}`)
newData := removeDataFromJSON(jsonData, "email")
fmt.Println(string(newData))
}
이상으로, Golang을 사용하여 구조체와 JSON 데이터를 다루는 방법을 소개했습니다. 이러한 코드 예제를 활용하여 JSON 데이터를 효과적으로 처리할 수 있을 것입니다. 질문이나 의문 사항이 있다면 언제든지 댓글로 문의하세요.