golang學習筆記——json數據

生成json格式字符
  • 使用結構體生成
package main
 
import (
    "encoding/json"
    "fmt"
)
 
//用於json的結構體類型成員首字母必須大寫
// type Jon struct {
    //  Name    string
    //  Subject []string
    //  Score   int
// }
 
type Jon struct {
    Name    string   `json:"name"` //指定json中顯示的名稱,使用"-"表示不輸出
    Subject []string `json:"su"`
    Score   int      `json:"score,string"` //轉爲字符串類型
}
 
func main() {
    var js Jon
    js = Jon{"cui", []string{"Go", "PHP"}, 20}
    fmt.Println(js)
    re, err := json.Marshal(js)
    if err != nil {
         fmt.Println(err)
         return
    }
    fmt.Println(string(re))
}
  • 使用map生成json
package main
 
import (
    "encoding/json"
    "fmt"
)
 
func main() {
    m := make(map[string]interface{}, 4)
    m["name"] = "cjp"
    m["subject"] = []string{"GO", "PHP"}
    m["score"] = 32
    json, err := json.Marshal(m)
    if err != nil {
         fmt.Println(err)
         return
    }
    fmt.Println(string(json))
}
 
解析json字符串
  • 解析到結構體
package main
 
import (
    "encoding/json"
    "fmt"
)
 
type Jon struct {
    Name    string   `json:"name"`
    Subject []string `json:"subject"`
    Score   int      `json:"score,string"`
}
 
type Jon2 struct {
    Name string `json:"name"`
}
 
func main() {
    jsonBuf := `{"name":"cjp","score":"32","subject":["GO","PHP"]}`
 
    var tmp1 Jon
    json.Unmarshal([]byte(jsonBuf), &tmp1)
    fmt.Printf("%+v \n", tmp1)
 
    //只保存指定字段
    var tmp2 Jon2
    json.Unmarshal([]byte(jsonBuf), &tmp2)
    fmt.Printf("%+v", tmp2)
}
  • 解析到map
package main
 
import (
   "encoding/json"
   "fmt"
)
 
func main() {
   jsonBuf := `{"name":"cjp","score":32,"subject":["GO","PHP"]}`
 
   m := make(map[string]interface{})
 
   json.Unmarshal([]byte(jsonBuf), &m)
 
   for key, value := range m {
      switch data := value.(type) {
      case string:
         fmt.Printf("map[%s] = %s \n", key, data)
      case []interface{}:
         fmt.Printf("map[%s] = %v \n", key, data)
      case float64: //這裏的32居然是浮點類型,確實沒想到
         fmt.Printf("map[%s] = %d \n", key, int(data))
      }
   }
 
}
  • 補充:不能確定變量類型時也可以使用反射獲取到變量的類型是什麼
package main
 
import (
   "encoding/json"
   "fmt"
   "reflect"
)
 
func main() {
   jsonBuf := `{"name":"cjp","score":32,"subject":["GO","PHP"]}`
 
   m := make(map[string]interface{})
 
   json.Unmarshal([]byte(jsonBuf), &m)
 
   for _, value := range m {
      fmt.Println(reflect.TypeOf(value))
   }
 
}
//**********輸出*************
[]interface {}
string
float64
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章