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判断key是否在map中的代码
Apr 24 Golang
go:垃圾回收GC触发条件详解
Apr 24 Golang
golang如何去除多余空白字符(含制表符)
Apr 25 Golang
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
go结构体嵌套的切片数组操作
Apr 28 Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
Golang中channel的原理解读(推荐)
Oct 16 Golang
Go语言基础函数基本用法及示例详解
Nov 17 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 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
jQuery实现评论模块
2020/08/19 jQuery
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
2014年内勤工作总结
2014/11/24 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
学生会招新宣传语
2015/07/13 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis