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 interface{}==nil 的几种坑及原理分析
Apr 24 Golang
go语言-在mac下brew升级golang
Apr 25 Golang
golang正则之命名分组方式
Apr 25 Golang
解决Go gorm踩过的坑
Apr 30 Golang
对Golang中的FORM相关字段理解
May 02 Golang
golang 比较浮点数的大小方式
May 02 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
Golang中channel的原理解读(推荐)
Oct 16 Golang
GoFrame框架数据校验之校验结果Error接口对象
Jun 21 Golang
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/04 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
python动态监控日志内容的示例
2014/02/16 Python
python计算书页码的统计数字问题实例
2014/09/26 Python
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
简单介绍Python中的readline()方法的使用
2015/05/24 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
python实现泊松图像融合
2018/07/26 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
介绍一下木马病毒的种类
2015/07/26 面试题
优秀求职信
2014/05/29 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
德劲DE1105机评
2022/04/05 无线电
Redis特殊数据类型bitmap位图
2022/06/01 Redis