golang生成并解析JSON


Posted in Golang onApril 14, 2022
目录

 

通过结构体生成json

buf, err := json.MarshalIndent(s, "", " ") //格式化编码

package main

import (
	"encoding/json"
	"fmt"
)

//成员变量名首字母必须大写
type IT struct {
	Company  string   `json:"-"`        //此字段不会输出到屏幕
	Subjects []string `json:"subjects"` //二次编码
	IsOk     bool     `json:",string"`
	Price    float64  `json:",string"`
}

func main() {
	//定义一个结构体变量,同时初始化
	s := IT{"itcast", []string{"Go", "C++", "Python", "Test"}, true, 666.666}

	//编码,根据内容生成json文本
	//{"Company":"itcast","Subjects":["Go","C++","Python","Test"],"IsOk":true,"Price":666.666}
	//buf, err := json.Marshal(s)
	buf, err := json.MarshalIndent(s, "", "	") //格式化编码
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Println(string(buf))
}

通过map生成json

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	//创建一个map
	m := make(map[string]interface{}, 4)
	m["company"] = "itcast"
	m["subjects"] = []string{"Go", "C++", "Python", "Test"}
	m["isok"] = true
	m["price"] = 666.666

	//编码成json
	//result, err := json.Marshal(m)
	result, err := json.MarshalIndent(m, "", "	")
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Println("result = ", string(result))
}

json解析到结构体

err := json.Unmarshal([]byte(jsonBuf), &tmp) //第二个参数要地址传递

package main

import (
	"encoding/json"
	"fmt"
)

type IT struct {
	Company  string   `json:"company"`
	Subjects []string `json:"subjects"` //二次编码
	IsOk     bool     `json:"isok"`
	Price    float64  `json:"price"`
}

func main() {

	jsonBuf := `
	{
    "company": "itcast",
    "subjects": [
        "Go",
        "C++",
        "Python",
        "Test"
    ],
    "isok": true,
    "price": 666.666
}`

	var tmp IT                                   //定义一个结构体变量
	err := json.Unmarshal([]byte(jsonBuf), &tmp) //第二个参数要地址传递
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	//fmt.Println("tmp = ", tmp)
	fmt.Printf("tmp = %+v\n", tmp)

	type IT2 struct {
		Subjects []string `json:"subjects"` //二次编码
	}

	var tmp2 IT2
	err = json.Unmarshal([]byte(jsonBuf), &tmp2) //第二个参数要地址传递
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Printf("tmp2 = %+v\n", tmp2)

}

json解析到map

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	jsonBuf := `
	{
    "company": "itcast",
    "subjects": [
        "Go",
        "C++",
        "Python",
        "Test"
    ],
    "isok": true,
    "price": 666.666
}`

	//创建一个map
	m := make(map[string]interface{}, 4)

	err := json.Unmarshal([]byte(jsonBuf), &m) //第二个参数要地址传递
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Printf("m = %+v\n", m)

	//	var str string
	//	str = string(m["company"]) //err, 无法转换
	//	fmt.Println("str = ", str)

	var str string

	//类型断言, 值,它是value类型
	for key, value := range m {
		//fmt.Printf("%v ============> %v\n", key, value)
		switch data := value.(type) {
		case string:
			str = data
			fmt.Printf("map[%s]的值类型为string, value = %s\n", key, str)
		case bool:
			fmt.Printf("map[%s]的值类型为bool, value = %v\n", key, data)
		case float64:
			fmt.Printf("map[%s]的值类型为float64, value = %f\n", key, data)
		case []string:
			fmt.Printf("map[%s]的值类型为[]string, value = %v\n", key, data)
		case []interface{}:
			fmt.Printf("map[%s]的值类型为[]interface, value = %v\n", key, data)
		}

	}

}

以上就是go语言通过结构体生成json示例解析的详细内容!

Golang 相关文章推荐
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
golang goroutine顺序输出方式
Apr 29 Golang
解决Golang time.Parse和time.Format的时区问题
Apr 29 Golang
golang slice元素去重操作
Apr 30 Golang
浅谈golang 中time.After释放的问题
May 05 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
golang 实用库gotable的具体使用
Jul 01 Golang
详解Golang如何优雅的终止一个服务
Mar 21 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
golang使用map实现去除重复数组
Apr 14 Golang
Golang解析JSON对象
Apr 30 Golang
Go语言 详解net的tcp服务
Apr 14 #Golang
golang连接MySQl使用sqlx库
Apr 14 #Golang
Go语言安装并操作redis的go-redis库
Apr 14 #Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 #Golang
Go语言grpc和protobuf
Golang流模式之grpc的四种数据流
Apr 13 #Golang
Golang数据类型和相互转换
Apr 12 #Golang
You might like
新版PHP将向Java靠拢
2006/10/09 PHP
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
PHP 木马攻击防御技巧
2009/06/13 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
浅谈php自定义错误日志
2015/02/13 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
Python 文件重命名工具代码
2009/07/26 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
python实现二叉查找树实例代码
2018/02/08 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
用Python制作音乐海报
2021/01/26 Python
美国知名艺术画网站:Art.com
2017/02/09 全球购物
应用服务器有那些
2012/01/19 面试题
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
如何写好优秀的创业计划书
2014/01/30 职场文书
策划总监岗位职责
2014/02/16 职场文书
社区健康教育实施方案
2014/03/18 职场文书
企业宣传工作方案
2014/06/02 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP
python 实现德洛内三角剖分的操作
2021/04/22 Python
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL