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 相关文章推荐
Golang二维切片初始化的实现
Apr 08 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
go结构体嵌套的切片数组操作
Apr 28 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
浅谈golang 中time.After释放的问题
May 05 Golang
golang 实用库gotable的具体使用
Jul 01 Golang
Go语言空白表示符_的实例用法
Jul 04 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 Golang
Golang jwt身份认证
Apr 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中函数的形参与实参的问题说明
2010/09/01 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
JS 控制CSS样式表
2009/08/20 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
JavaScript实现动态留言板
2020/03/16 Javascript
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python可跨平台实现获取按键的方法
2015/03/05 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
办公室文秘自我鉴定
2013/09/21 职场文书
经典的班主任推荐信
2013/10/28 职场文书
简历自荐信
2013/12/02 职场文书
酒吧创业计划书
2014/01/18 职场文书
仓管员岗位责任制
2014/02/19 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
家长意见和建议怎么写
2015/06/04 职场文书