ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Golang에서 Json 사용예시
    Language/Golang 2023. 2. 7. 21:28

    Json Parsing

    Go 에서는 Marchaling 된 Json 은 Byte Arrary 로 사용되며,

    UnMarshaling 의 경우 구조체나 map 과 같은 데이터로 치환하여 받을 수 있습니다.

    map 의 경우 Json Object를 의미하며, Array 의 경우 Json Array 로 표기됩니다.

    []byte -> map

    Json을 map 으로 변환합니다.

    생성한 result 가 Json 형식과 맞지 않는 경우 실패처리 됩니다.

    package main
    
    import "fmt"
    import "encoding/json"
    
    func main() {
        b := []byte("{\"a\":10,\"b\":\"test\"}")
    
        result := make(map[string]interface{})
    
        err := json.Unmarshal(b, &result)
    
        if err != nil {
            fmt.Println(err)
        }
    
        fmt.Println(result)
    }

    []byte -> struct

    명확하게 어떠한 Json 을 받을지 알고 있어야 사용 가능합니다.

    명시된 Json Key 외에는 데이터가 존재해도 버림처리됩니다.

    package main
    
    import "fmt"
    import "encoding/json"
    
    type JsonData struct {
        A int `json:"a"`
        B string `json:"b"`
    }
    
    func main() {
        b := []byte("{\"a\":10,\"b\":\"test\",\"c\":53}")
    
        result := JsonData{}
    
        err := json.Unmarshal(b, &result)
    
        if err != nil {
            fmt.Println(err)
        }
    
        fmt.Println(result)
    }

    struct -> []byte

    구조체를 Json으로 변형합니다. Json Key 가 명시된 구조체 필드는 값의 유무와 관계 없이 Json 에 무조건 추가됩니다.

    package main
    
    import "fmt"
    import "encoding/json"
    
    type JsonData struct {
        A int `json:"a"`
        B string `json:"b"`
        C []string `json:"c"`
        D map[int]interface{} `json:"d"`
        E []map[string]interface{} `json:"e"`
    }
    
    func main() {
    
        result := JsonData{}
        result.A = 10
        result.B = "B"
        result.C = append(result.C, "In C1")
        result.C = append(result.C, "In C2")
        result.D = make(map[int]interface{})
        result.D[10] = "Test D Value"
        result.E = make([]map[string]interface{}, 0, 0)
    
        Tmp := make(map[string]interface{})
        Tmp["70"] = 80
    
        result.E = append(result.E, Tmp)
    
        jsonbody, err := json.Marshal(result)
    
        if err != nil {
            fmt.Println(err)
        }
    
        fmt.Println(string(jsonbody))
    }

    map -> []byte

    interface 의 다형성을 통한 map 으로 Json 형식을 구현하고 마샬링을 할 수 있습니다.

    package main
    
    import "fmt"
    import "encoding/json"
    
    func main() {
    
        tmp := make(map[string]interface{})
        tmp["a"] = 10
        tmp["b"] = "test"
        tmp["c"] = false
        tmp["d"] = nil
    
        e := make(map[string]interface{})
        e["x"] = 1
        tmp["e"] = e
    
        jsonbody, err := json.Marshal(tmp)
    
        if err != nil {
            fmt.Println(err)
        }
    
        fmt.Println(string(jsonbody))
    
        result := make([]map[string]interface{},0,0)
    
        result = append(result, tmp)
        result = append(result, tmp)
    
        jsonbody, err = json.Marshal(result)
    
        if err != nil {
            fmt.Println(err)
        }
    
        fmt.Println(string(jsonbody))
    }

    'Language > Golang' 카테고리의 다른 글

    Kafka Golang 예제  (0) 2023.02.12
    CGO ( Golang With C++ ) 케이스별 설명 및 예시  (0) 2023.02.07
    문법 및 사용법 예시  (0) 2023.02.07
    자료형 및 키워드  (0) 2023.02.07
    Golang 설치 및 IDE  (0) 2023.02.07
Designed by Tistory.