[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