-
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