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 相关文章推荐
Go语言操作数据库及其常规操作的示例代码
Apr 21 Golang
解决golang 关于全局变量的坑
May 06 Golang
golang 实现并发求和
May 08 Golang
go 实现简易端口扫描的示例
May 22 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
Go归并排序算法的实现方法
Apr 06 Golang
Go并发4种方法简明讲解
Apr 06 Golang
Golang 链表的学习和使用
Apr 19 Golang
Golang日志包的使用
Apr 20 Golang
Golang 并发编程 SingleFlight模式
Apr 26 Golang
Go微服务项目配置文件的定义和读取示例详解
Jun 21 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
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
Python中的多行注释文档编写风格汇总
2016/06/16 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
django云端留言板实例详解
2019/07/22 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
煤矿班组长的职责
2013/12/25 职场文书
写给女生的道歉信
2014/01/08 职场文书
便利店促销方案
2014/02/20 职场文书
公司门卫岗位职责
2014/03/15 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
责任书格式
2015/01/29 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
python unittest单元测试的步骤分析
2021/08/02 Python
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL
解决 redis 无法远程连接
2022/05/15 Redis