Golang을 사용한 구조체와 JSON 다루기

안녕하세요. 오늘은 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 데이터를 효과적으로 처리할 수 있을 것입니다. 질문이나 의문 사항이 있다면 언제든지 댓글로 문의하세요.

タイトルとURLをコピーしました