티스토리 뷰

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 

'go' 카테고리의 다른 글

GO sql db 처리  (0) 2024.07.16
Go xml 처리  (0) 2024.07.16
Go Http Post 호출  (0) 2024.07.16
Go Http GET 요청  (0) 2024.07.16
Go 파일 읽고 쓰기  (0) 2024.07.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/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
글 보관함