[GoLang 에서 json 사용하기]


* struct 구조체 선언시 변수명의 첫글자는 반드시 대문자여야 합니다.

* omitempty 입력 시 앞 쉼표 사이에 빈칸은 넣지 않으며 (넣으면 단순 경고 표시 발생)

  설정하게 되면 json 객체를 생성할때 해당 필드에 값이 없을 경우에만 필드를 변환하지 않고 건너뜁니다.

* `json:"-"` 설정 시 해당 필드는 무조건 변환되지 않습니다.



[예제 소스]


package main

import (
    "encoding/json"
    "fmt"
)

// Data is data
type Data struct {
    Name string `json:"Name"`
    Age int `json:"Age"`
    Etc1 string `json:"Etc1,omitempty"`
    Etc2 string `json:"Etc2,omitempty"`
    Temp string `json:"-"`
}

func main() {

    var jobj = Data{Name: "aaa", Age: 19, Etc1: "bbb", Etc2: "", Temp: "1123123"}
    jstrbyte, _ := json.Marshal(jobj)
    fmt.Println("---- jobj")
    fmt.Println(jobj)
    fmt.Println()
    fmt.Println("---- jstrbyte")
    fmt.Println(jstrbyte)
    fmt.Println()
    fmt.Println("---- string(jstrbyte)")
    fmt.Println(string(jstrbyte))
    fmt.Println()

    var jobj2 Data
    err := json.Unmarshal(jstrbyte, &jobj2)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println("---- jobj2")
    fmt.Println(jobj2)
    fmt.Println()
    fmt.Println("---- jobj2.Name, jobj2.Age, jobj2.Etc1, jobj2.Etc2")
    fmt.Println(jobj2.Name, jobj2.Age, jobj2.Etc1, jobj2.Etc2)
    fmt.Println()

}



[결과]


* "omitempty", "-" : 두 설정 결과


---- jobj
{aaa 19 bbb 1123123}

---- jstrbyte
[123 34 78 97 109 101 ...... 98 98 98 34 125]

---- string(jstrbyte)
{"Name":"aaa","Age":19,"Etc1":"bbb"}

---- jobj2
{aaa 19 bbb }

---- string(jstrbyte)
{"Name":"aaa","Age":19,"Etc1":"bbb"}

---- jobj2.Name, jobj2.Age, jobj2.Etc1, jobj2.Etc2
aaa 19 bbb


+ Recent posts