博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GO语言开发之JSON处理 编码JSON 与 解码JSON
阅读量:4201 次
发布时间:2019-05-26

本文共 2270 字,大约阅读时间需要 7 分钟。

1. json简介

JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成。尽管JSON是JavaScript的一个子集,但JSON采用完全独立于编程语言的文本格式,且表现为键/值对集合的文本描述形式(类似一些编程语言中的字典结构),这使它成为较为理想的、跨平台、跨语言的数据交换语言。

开发者可以用 JSON 传输简单的字符串、数字、布尔值,也可以传输一个数组,或者一个更复杂的复合结构。在 Web 开发领域中, JSON被广泛应用于 Web 服务端程序和客户端之间的数据通信。

Go语言内建对JSON的支持。使用Go语言内置的encoding/json 标准库,开发者可以轻松使用Go程序生成和解析JSON格式的数据。

 

JSON官方网站:

在线格式化:

 

2. json编码

使用json.Marshal()函数可以对一组数据进行JSON格式的编码。

func Marshal(interface{}) ([]byte, error)

MarshalIndent 很像 Marshal,只是用缩进对输出进行格式化

func MarshalIndent(interface{}, prefix, indent string) ([]byte, error)

package mainimport (	"encoding/json"	"fmt")type IT struct{	Name string	Company string	Subjects []string	IsOk bool	Price float64}func main()	t1 := IT{"Ternence Hsu","Google", []string{"Go", "C++", "Python", "Test"}, true,666.666}	//生成一段JSON 格式的文本	//如果编码成功, err 将赋于零值 nil,变量b 将会是一个进行JSON 格式化之后的[]byte 类型	b1, err := json.Marshal(t1)	if err != nil {		fmt.Println("json err:", err)	}		// 用缩进对输出进行格式化	b2, err := json.MarshalIndent(t1, "", "    ")	if err != nil {		fmt.Println("json err:", err)	}	fmt.Println(string(b1))	fmt.Println(string(b2))}	/*		b1输出结果:		{"Name":"Ternence Hsu","Company":"Google","Subjects":["Go","C++","Python","Test"],"IsOk":true,"Price":666.666}		b2 输出结果:		{			"Name":"Ternence Hsu",			"Company":"Google",			"Subjects":[				"Go",				"C++",				"Python",				"Test"			],			"IsOk":true,			"Price":666.666		}	*/

3. json解码

使用json.Unmarshal()函数将JSON格式的文本解码为Go里面预期的数据结构

func Unmarshal(data []byte, v interface{}) error

package mainimport (	"encoding/json"	"fmt")type IT struct {	Name  	 string   `json:"name"`	Company  string   `json:"company"`	Subjects []string `json:"subjects"`	IsOk     bool     `json:"isok"`	Price    float64  `json:"price"`}	func main() {	b := []byte(`{	"name": "Ternence Hsu",	"company": "Google",	"subjects": [		"Go",		"C++",		"Python",		"Test"	],	"isok": true,	"price": 666.666}`)	var t IT	err := json.Unmarshal(b, &t)	if err != nil {		fmt.Println("json err:", err)	}	fmt.Println(t)	//运行结果:{Ternence Hsu Google [Go C++ Python Test] true 666.666}	//只想要Subjects字段	type IT2 struct {		Subjects []string `json:"subjects"`	}	var t2 IT2	err = json.Unmarshal(b, &t2)	if err != nil {		fmt.Println("json err:", err)	}	fmt.Println(t2)	//运行结果:{[Go C++ Python Test]}}

你可能感兴趣的文章
PySpark in PyCharm on a remote server
查看>>
virtualbox增强功能-VBoxGuestAdditions安装
查看>>
Linux下安装MySql(版本5.5以上)
查看>>
Virtualbox中Linux添加一个新磁盘
查看>>
胜景之地
查看>>
jar 独立运行文件制作(于windows平台)
查看>>
使用selenium动态爬取
查看>>
在SAS中进行关联规则分析
查看>>
互联网金融产品如何利用大数据做风控
查看>>
数据库基础问答Q&A
查看>>
DeepCopy
查看>>
R语言问题——连接数据库乱码问题解决方案
查看>>
json读取+对象转换+csv读写
查看>>
加密算法比较3DES AES RSA ECC MD5 SHA1等
查看>>
[Python]Anaconda(python数据分析工具箱版)安装
查看>>
CentOS安装glibc-2.14
查看>>
Hadoop FS Shell Command
查看>>
Eclipse版本查看
查看>>
Linux下安装MySql(多实例+主备)
查看>>
检测远程端口是否打开
查看>>