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
golang如何去除多余空白字符(含制表符)
Apr 25 Golang
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
golang import自定义包方式
Apr 29 Golang
golang slice元素去重操作
Apr 30 Golang
解决golang结构体tag编译错误的问题
May 02 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
深入理解go缓存库freecache的使用
Feb 15 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/07/12 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
vue router demo详解
2017/10/13 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
python多进程实现进程间通信实例
2017/11/24 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
详解python的变量缓存机制
2021/01/24 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
网站创业计划书
2014/04/30 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
五四青年节的活动方案
2014/08/20 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
文明家庭事迹材料
2014/12/20 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
Python实现滑雪小游戏
2021/09/25 Python