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中切片copy复制和等号复制的区别介绍
Apr 27 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
golang 比较浮点数的大小方式
May 02 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
浅谈Go语言多态的实现与interface使用
Jun 16 Golang
详解Golang如何优雅的终止一个服务
Mar 21 Golang
Golang使用Panic与Recover进行错误捕获
Mar 22 Golang
Go归并排序算法的实现方法
Apr 06 Golang
Go获取两个时区的时间差
Apr 20 Golang
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
Jun 21 Golang
在ubuntu下安装go开发环境的全过程
Aug 05 Golang
基于Python实现西西成语接龙小助手
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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
List Installed Software Features
2007/06/11 Javascript
XML的代替者----JSON
2007/07/21 Javascript
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
JS获取时间的方法
2015/01/21 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
vue二级路由设置方法
2018/02/09 Javascript
使用python装饰器验证配置文件示例
2014/02/24 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
化学相关工作求职信
2013/10/02 职场文书
机关财务管理制度
2014/01/17 职场文书
运动会100米解说词
2014/01/23 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
考研导师推荐信范文
2015/03/27 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis