Golang - 處理json

Golang - 處理json

1. 編碼json

  • 使用json.Marshal()函數能夠對一組數據進行JSON格式的編碼
  • func Marshal(v interface{}) ([]byte, error)
  • 經過結構體生成json,結構體屬性字段名首字母要大寫json

    package main
    
      import (
         "encoding/json"
         "fmt"
      )
    
      type Person struct {
         Name  string
         Hobby string
      }
    
      func main() {
         p := Person{"luhan", "男"}
         //1.生成JSON文本
         b, err := json.Marshal(p)
         if err != nil {
            fmt.Println("json err:", err)
         }
         fmt.Println(string(b))
         //2.生成格式化json,沒啥用
         b, err = json.MarshalIndent(p, "", "    ")
         if err != nil {
            fmt.Println("json err:", err)
         }
         fmt.Println(string(b))
      }

struct tag
-是隱藏字段函數

也能夠直接寫別名,包含首字母小寫的單詞編碼

經過map生成jsoncode

package main

import (
   "encoding/json"
   "fmt"
)

func main() {
   //建立map
   mmp := make(map[string]interface{})
   mmp["name"] = "luhan"
   mmp["age"] = 56
   mmp["niubility"] = true

   //map轉爲json
   mjson, err := json.Marshal(mmp)
   if err != nil {
      fmt.Println("json err:", err)
   }
   fmt.Println(string(mjson))
}

2. 解碼json

解析到結構體接口

package main

import (
   "encoding/json"
   "fmt"
)

type Person struct {
   Name  string `json:"name"`
   Hobby string `json:"hobby"`
}

func main() {
   //1.準備一段json
   b := []byte(`{"Name":"luhan","Hobby":"男"}`)
   //2.聲明結構體
   var p Person
   //3.解析
   err := json.Unmarshal(b, &p)
   if err != nil {
      fmt.Println("json err:", err)
   }
   fmt.Println(p)
}

解析到interfacestring

package main

import (
   "encoding/json"
   "fmt"
)

func main() {
   //1.準備一段json
   b := []byte(`{"Name":"luhan","Hobby":"男"}`)
   //2.聲明空接口
   var i interface{}
   //3.解析
   err := json.Unmarshal(b, &i)
   if err != nil {
      fmt.Println("json err:", err)
   }
   //自動轉map
   fmt.Println(i)
   //4.使用interface的json,能夠判斷類型
   m := i.(map[string]interface{})
   for k, v := range m {
      switch vv := v.(type) {
      case string:
         fmt.Println(k, "是string類型", vv)
      case int:
         fmt.Println(k, "是int類型", vv)
      default:
         fmt.Println(k, "是其餘類型")
      }
   }
}
相關文章
相關標籤/搜索