티스토리 뷰

반응형

 

Go 언어에서 JSON 데이터를 파싱하는 방법을 설명해 드리겠습니다. Go는 encoding/json 패키지를 사용하여 JSON 데이터를 인코딩 및 디코딩할 수 있습니다. 아래는 JSON 데이터를 파싱하는 기본적인 예시입니다.

Go 언어로 JSON 파싱하기

1. 기본 JSON 파싱

다음 예제는 JSON 문자열을 Go 구조체로 파싱하는 방법을 보여줍니다.

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

// Person 구조체를 정의합니다
type Person struct {
    Name  string `json:"name"`
    Age   int    `json:"age"`
    Email string `json:"email"`
}

func main() {
    // JSON 문자열
    jsonString := `{"name": "John Doe", "age": 30, "email": "john.doe@example.com"}`

    // Person 구조체 변수를 생성합니다
    var person Person

    // JSON 문자열을 Person 구조체로 디코딩합니다
    err := json.Unmarshal([]byte(jsonString), &person)
    if err != nil {
        log.Fatalf("Error decoding JSON: %v", err)
    }

    // 파싱된 데이터를 출력합니다
    fmt.Printf("Name: %s\n", person.Name)
    fmt.Printf("Age: %d\n", person.Age)
    fmt.Printf("Email: %s\n", person.Email)
}

2. 동적 JSON 파싱

JSON 구조가 동적으로 변할 수 있는 경우, map[string]interface{}를 사용하여 JSON을 동적으로 파싱할 수 있습니다.

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

func main() {
    // JSON 문자열
    jsonString := `{"name": "Jane Doe", "age": 25, "email": "jane.doe@example.com"}`

    // 빈 map을 생성합니다
    var result map[string]interface{}

    // JSON 문자열을 map으로 디코딩합니다
    err := json.Unmarshal([]byte(jsonString), &result)
    if err != nil {
        log.Fatalf("Error decoding JSON: %v", err)
    }

    // 파싱된 데이터를 출력합니다
    fmt.Printf("Name: %s\n", result["name"])
    fmt.Printf("Age: %v\n", result["age"])  // 인터페이스형이므로 %v로 출력
    fmt.Printf("Email: %s\n", result["email"])
}

3. JSON 배열 파싱

JSON 배열을 파싱하는 예제입니다. 배열의 각 요소를 Go의 구조체나 map으로 변환할 수 있습니다.

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

// Person 구조체를 정의합니다
type Person struct {
    Name  string `json:"name"`
    Age   int    `json:"age"`
    Email string `json:"email"`
}

func main() {
    // JSON 배열 문자열
    jsonArray := `[{"name": "John Doe", "age": 30, "email": "john.doe@example.com"}, {"name": "Jane Doe", "age": 25, "email": "jane.doe@example.com"}]`

    // Person 구조체의 슬라이스를 생성합니다
    var people []Person

    // JSON 배열 문자열을 Person 구조체의 슬라이스로 디코딩합니다
    err := json.Unmarshal([]byte(jsonArray), &people)
    if err != nil {
        log.Fatalf("Error decoding JSON: %v", err)
    }

    // 파싱된 데이터를 출력합니다
    for _, person := range people {
        fmt.Printf("Name: %s\n", person.Name)
        fmt.Printf("Age: %d\n", person.Age)
        fmt.Printf("Email: %s\n", person.Email)
        fmt.Println()
    }
}

코드 설명

  • 기본 JSON 파싱:
    • json.Unmarshal 함수를 사용하여 JSON 문자열을 Go의 구조체로 변환합니다.
    • JSON 키와 구조체 필드는 json 태그를 통해 매핑됩니다.
  • 동적 JSON 파싱:
    • map[string]interface{}를 사용하여 JSON을 동적으로 파싱합니다.
    • 값의 타입이 동적이므로, 적절한 타입 단언(type assertion)을 사용해야 할 수 있습니다.
  • JSON 배열 파싱:
    • JSON 배열을 Go의 슬라이스로 변환합니다.
    • 배열의 각 요소를 구조체로 변환하여 사용합니다.

이 예제들을 통해 Go에서 JSON 데이터를 어떻게 파싱하고 활용하는지 이해할 수 있습니다. 추가적인 JSON 처리 기능이 필요하면 encoding/json 패키지의 문서를 참조하세요.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함