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项目中使用init()
Apr 12 Golang
Go语言带缓冲的通道实现
Apr 26 Golang
golang json数组拼接的实例
Apr 28 Golang
浅谈Golang 切片(slice)扩容机制的原理
Jun 09 Golang
Golang生成Excel文档的方法步骤
Jun 09 Golang
golang为什么要统一错误处理
Apr 03 Golang
Golang数据类型和相互转换
Apr 12 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
Golang 结构体数据集合
Apr 22 Golang
Go结合Gin导出Mysql数据到Excel表格
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开发文件系统实例讲解
2006/10/09 PHP
php4的session功能评述(三)
2006/10/09 PHP
服务器端解压缩zip的脚本
2006/12/22 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
php常用Stream函数集介绍
2013/06/24 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP Cookie学习笔记
2016/08/23 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
Node.js学习教程之Module模块
2019/09/03 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
django model去掉unique_together报错的解决方案
2016/10/18 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
Python装饰器用法实例总结
2018/05/26 Python
python面向对象法实现图书管理系统
2019/04/19 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
教职工代表大会主持词
2014/04/01 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
计算机求职信
2014/07/02 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
python 爬取天气网卫星图片
2021/06/07 Python