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 相关文章推荐
goland 恢复已更改文件的操作
Apr 28 Golang
Go语言 go程释放操作(退出/销毁)
Apr 30 Golang
Golang 获取文件md5校验的方法以及效率对比
May 08 Golang
Golang 实现获取当前函数名称和文件行号等操作
May 08 Golang
Golang生成Excel文档的方法步骤
Jun 09 Golang
深入理解go slice结构
Sep 15 Golang
Go 语言中 20 个占位符的整理
Oct 16 Golang
golang生成vcf通讯录格式文件详情
Mar 25 Golang
golang生成并解析JSON
Apr 14 Golang
Golang 结构体数据集合
Apr 22 Golang
Go调用Rust方法及外部函数接口前置
Jun 14 Golang
在ubuntu下安装go开发环境的全过程
Aug 05 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/02/16 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
禁止拷贝网页内容的js代码
2014/01/22 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
微信小程序开发探究
2016/12/27 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
python网络编程之读取网站根目录实例
2014/09/30 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
HEMA英国:荷兰原创设计
2018/08/28 全球购物
SQL Server面试题
2016/10/17 面试题
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
小学班主任评语
2014/12/29 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android