首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
清单首页golang文章详情

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

下一篇
举报
领券