前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang学习笔记——json数据

golang学习笔记——json数据

作者头像
码缘
发布2021-03-04 15:06:48
3510
发布2021-03-04 15:06:48
举报
文章被收录于专栏:PHP修行之路PHP修行之路

生成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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档