go

Go Json 처리

까오기 2024. 7. 16. 12:31

Go에서 JSON 처리를 위해 encoding/json 패키지를 사용합니다. 이 패키지는 JSON 데이터를 Go 객체로 디코딩(바인딩)하고, Go 객체를 JSON 형식으로 인코딩하는 기능을 제공합니다.

JSON 데이터 디코딩 (Unmarshal)

json.Unmarshal 함수를 사용하여 JSON 데이터를 Go 객체로 디코딩할 수 있습니다. 예를 들어, JSON 문자열을 구조체에 바인딩하는 방법은 다음과 같습니다.

package main

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

// Person 구조체 정의
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    // JSON 문자열
    jsonString := `{"name": "Alice", "age": 30}`

    // 구조체 초기화
    var person Person

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

    // 결과 출력
    fmt.Printf("Name: %s, Age: %d\n", person.Name, person.Age)
}

JSON 데이터 인코딩 (Marshal)

json.Marshal 함수를 사용하여 Go 객체를 JSON 형식으로 인코딩할 수 있습니다. 예를 들어, 구조체를 JSON 문자열로 변환하는 방법은 다음과 같습니다.

package main

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

// Person 구조체 정의
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    // 구조체 초기화
    person := Person{
        Name: "Bob",
        Age:  25,
    }

    // 구조체를 JSON 문자열로 인코딩
    jsonData, err := json.Marshal(person)
    if err != nil {
        log.Fatalf("Error encoding JSON: %v", err)
    }

    // JSON 문자열 출력
    fmt.Println(string(jsonData))
}

JSON 문자열을 객체에 바인딩 및 객체를 JSON으로 변환하는 전체 예제

package main

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

// Person 구조체 정의
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    // JSON 문자열
    jsonString := `{"name": "Charlie", "age": 28}`

    // 구조체 초기화
    var person Person

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

    // 디코딩 결과 출력
    fmt.Printf("Decoded Struct - Name: %s, Age: %d\n", person.Name, person.Age)

    // 구조체를 JSON 문자열로 인코딩 (Marshal)
    jsonData, err := json.Marshal(person)
    if err != nil {
        log.Fatalf("Error encoding JSON: %v", err)
    }

    // 인코딩 결과 출력
    fmt.Println("Encoded JSON:", string(jsonData))
}

실행 결과

Decoded Struct - Name: Charlie, Age: 28
Encoded JSON: {"name":"Charlie","age":28}

코드 설명

  1. 구조체 정의: Person 구조체는 JSON 데이터의 형식을 정의합니다. 구조체 필드에는 json 태그를 사용하여 JSON 키와 매핑합니다.
  2. JSON 문자열: 예제에서 사용되는 JSON 문자열입니다.
  3. 구조체 초기화: JSON 데이터를 디코딩할 구조체를 선언하고 초기화합니다.
  4. Unmarshal: json.Unmarshal 함수를 사용하여 JSON 문자열을 구조체로 디코딩합니다. JSON 데이터가 바이트 슬라이스 형식으로 제공되므로 []byte(jsonString)로 변환합니다.
  5. 디코딩 결과 출력: 디코딩된 구조체 데이터를 출력합니다.
  6. Marshal: json.Marshal 함수를 사용하여 구조체를 JSON 문자열로 인코딩합니다. 이 함수는 구조체를 바이트 슬라이스 형식의 JSON 데이터로 변환합니다.
  7. 인코딩 결과 출력: 인코딩된 JSON 문자열을 출력합니다.

이 예제에서는 JSON 데이터를 구조체에 바인딩하고, 구조체를 JSON 문자열로 변환하는 기본적인 방법을 다룹니다. 이를 통해 JSON 데이터와 Go 객체 간의 변환 작업을 쉽게 처리할 수 있습니다.

 

출처 : chatGPT