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

posted @ 2019-04-13 23:46  孔辉  阅读(2286)  评论(0)    收藏  举报