Yume 練功地

偷偷練

Go JSON

Package json

1
2
3
4
5
6
7
8
9
import "encoding/json"

type Person struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
MiddleName string `json:"middle_name,omitempty"`
// 不会导出到JSON中
Sex int `json:"-"`
}
  • 字段的tag是 “-“,那么这个字段不会输出到JSON
  • tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中,例如上面例子中serverName
  • tag中如果带有”omitempty”选项,那么如果该字段值为空,就不会输出到JSON串中
  • 如果字段类型是bool, string, int, int64等,而tag中带有”,string”选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串
JSON Parse
1
2
3
4
5
6
7
8
9
10
11
12
 json_string := `
{
"first_name": "John",
"last_name": "Smith"
}`


person := new(Person)
// json to struct
json.Unmarshal([]byte(json_string), person)

// struct to json string
new_json, _ := json.Marshal(person)
Handling JSON Post Request in Golink
1
2
3
4
5
6
7
8
9
func test(rw http.ResponseWriter, req *http.Request) {
decoder := json.NewDecoder(req.Body)
var t test_struct
err := decoder.Decode(&t)
if err != nil {
panic()
}
log.Println(t.Test)
}

Unmarsha 對應的型態

1
2
3
4
5
6
bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null

Go and JSON