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:垃圾回收GC触发条件详解
Apr 24 Golang
基于Go Int转string几种方式性能测试
Apr 28 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
Golang: 内建容器的用法
May 05 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
golang内置函数len的小技巧
Jul 25 Golang
Go语言读取txt文档的操作方法
Jan 22 Golang
Go语言实现一个简单的并发聊天室的项目实战
Mar 18 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Apr 10 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 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+mysql写的简单留言本实例代码
2008/07/25 PHP
php 字符串替换的方法
2012/01/10 PHP
apache php模块整合操作指南
2012/11/16 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
Python封装原理与实现方法详解
2018/08/28 Python
python实现各种插值法(数值分析)
2019/07/30 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
Python实现一个优先级队列的方法
2020/07/31 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
供用电专业求职信
2014/07/07 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
个人作风建设总结
2014/10/23 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python