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语言map与string的相互转换的实现
Apr 07 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
Golang的继承模拟实例
Jun 30 Golang
Go语言空白表示符_的实例用法
Jul 04 Golang
golang fmt格式“占位符”的实例用法详解
Jul 04 Golang
深入理解go slice结构
Sep 15 Golang
Go语言基础函数基本用法及示例详解
Nov 17 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
Golang bufio详细讲解
Apr 21 Golang
Golang 切片(Slice)实现增删改查
Apr 22 Golang
Golang 并发编程 SingleFlight模式
Apr 26 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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
python3中的md5加密实例
2018/05/29 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
用pycharm开发django项目示例代码
2019/06/13 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
大学应届毕业生求职信
2014/05/24 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
2015感人爱情寄语
2015/02/26 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
Python time库的时间时钟处理
2021/05/02 Python
Python OpenCV形态学运算示例详解
2022/04/07 Python