Golang - 处理json Golang - 处理json

Golang - 处理json

 

目录

Golang - 处理json

1. 编码json

  • 使用json.Marshal()函数可以对一组数据进行JSON格式的编码
  • func Marshal(v interface{}) ([]byte, error)
  • 通过结构体生成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生成json

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) }

解析到interface

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, "是其他类型") } } }
 
 

Golang - 处理json

1. 编码json

  • 使用json.Marshal()函数可以对一组数据进行JSON格式的编码
  • func Marshal(v interface{}) ([]byte, error)
  • 通过结构体生成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生成json

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) }

解析到interface

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, "是其他类型") } } }

猜你喜欢

转载自www.cnblogs.com/yanghongtao/p/10970395.html