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 Gin实现文件上传下载的示例代码
Apr 02 Golang
go语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
解决Golang中ResponseWriter的一个坑
Apr 27 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
Golang中channel的原理解读(推荐)
Oct 16 Golang
golang生成vcf通讯录格式文件详情
Mar 25 Golang
Go语言的协程上下文的几个方法和用法
Apr 11 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 Golang
Golang 字符串的常见操作
Apr 19 Golang
Go web入门Go pongo2模板引擎
May 20 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中global和$GLOBALS[]的分析之一
2012/02/02 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
python 运算符 供重载参考
2009/06/11 Python
python根据出生日期获得年龄的方法
2015/03/31 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
python__name__原理及用法详解
2019/11/02 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
Python 实现微信自动回复的方法
2020/09/11 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
大学生党课思想汇报
2013/12/29 职场文书
中药专业自荐信范文
2014/03/18 职场文书
事业单位鉴定材料
2014/05/25 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
生物工程专业求职信
2014/09/03 职场文书
文化大革命观后感
2015/06/17 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android