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
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
解决Golang中ResponseWriter的一个坑
Apr 27 Golang
goland 恢复已更改文件的操作
Apr 28 Golang
Go 实现英尺和米的简单单位换算方式
Apr 29 Golang
golang slice元素去重操作
Apr 30 Golang
Go语言空白表示符_的实例用法
Jul 04 Golang
Go Plugins插件的实现方式
Aug 07 Golang
实现GO语言对数组切片去重
Apr 20 Golang
Golang 实现WebSockets
Apr 24 Golang
Golang解析JSON对象
Apr 30 Golang
Go语言编译原理之源码调试
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
使用php4加速网络传输
2006/10/09 PHP
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
jquery 使用简明教程
2014/03/05 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
js实现常用排序算法
2016/08/09 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
详解在Python程序中自定义异常的方法
2015/10/16 Python
分析Python读取文件时的路径问题
2018/02/11 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
syb养殖创业计划书
2014/01/09 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
村庄环境整治方案
2014/05/15 职场文书
任命书怎么写
2014/06/04 职场文书
合作协议书范本
2014/10/25 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
一文搞懂Python Sklearn库使用
2021/08/23 Python