广告
返回顶部
首页 > 资讯 > 后端开发 > GO >GoLang之标准库encoding/json包
  • 598
分享到

GoLang之标准库encoding/json包

2024-04-02 19:04:59 598人浏览 安东尼
摘要

目录1.JSON介绍2.jsON序列化、反序列化介绍3.encoding/json包介绍4.Marshal函数5.Umarshal函数 6.结构体标签Tag注:本文以Win

注:本文以Windos系统上Go SDK v1.8进行讲解

1.JSON介绍

在进行前后分离式开发时,json显得格外的重要,因为他是链接前后台重要的枢纽
json是储存和交换文本信息的语法,他类似于xml,但是他比xml更加的便捷,快速,易于解析。主要使用场景就是作为前后台数据交互的枢纽,以下是一个简单json的格式:
JSON: javascript Object Notation(JavaScript 对象标记法)。
JSON 是一种存储和交换数据的语法。
JSON 是通过 JavaScript 对象标记法书写的文本。
当数据在浏览器与服务器之间进行交换时,这些数据只能是文本。
JSON 属于文本,并且我们能够把任何 JavaScript 对象转换为 JSON,然后将 JSON 发送到服务器。
我们也能把从服务器接收到的任何 JSON 转换为 JavaScript 对象。
以这样的方式,我们能够把数据作为 JavaScript 对象来处理,无需复杂的解析和转译。
JSON 使用 JavaScript 语法,但是 JSON 格式是纯文本的。
文本可被任何编程语言作为数据来读取和使用。
JSON 格式最初由 Douglas Crockford 提出。
因为 JSON 格式仅仅是文本,它能够轻松地在服务器浏览器之间传输,并用作任何编程语言的数据格式。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON键值对是用来保存JS对象的一种方式,键/值对组合中的键名写在前面并用双引号""包裹,使用冒号:分隔,然后紧接着值;多个键值之间使用英文,分隔

2.JSON序列化、反序列化介绍

json的序列化与反序列化介绍:
那么在说明如何解析Json和XML之前,我们先来搞清楚两个概念:序列化和反序列化。
序列化,即Serialization,是一个将对象的状态信息转变为可以存储或传输的形式的过程。
反序列化,即Deserialization,顾名思义是一个将可以存储或传输的序列转变为某个对象的状态信息的过程。
1.这两个过程互为逆过程;
2.无论是序列化还是反序列化,对象的状态信息都与一段序列相对应。

3.encoding/json包介绍

4.Marshal函数

//Student 学生
type Student struct {
	ID     int
	Gender string
	Name   string
}

//Class 班级
type Class struct {
	Title    string
	Students []Student
}

//student的构造函数
func newStudent(id int, name string) Student {
	return Student{
		ID:   id,
		Name: name,
	}
}
func main() {
	//创建了一个班级变量
	c1 := Class{
		Title:    "101",
		Students: make([]Student, 0, 200),
	}
	//往班级变量中添加学生

	for i := 0; i < 10; i++ {
		tmpStu := newStudent(i, fmt.Sprintf("stu%02d,", i))
		c1.Students = append(c1.Students, tmpStu)
	}
	fmt.Println(c1)
	//输出:{101 [{0  stu00,} {1  stu01,} {2  stu02,} {3  stu03,} {4  stu04,} {5  stu05,} {6  stu06,} {7  stu07,} {8  stu08,} {9  stu09,}]}
	//JSON序列化:结构体转化为JSON格式的字符串
	data, err := json.Marshal(c1)
	if err != nil {
		fmt.Println("json marshal failed")
		return
	}
	fmt.Printf("%T\n", data) //[]uint8
	//fmt.Println(data)//尽量不要采用这样的方式
	fmt.Println(string(data))
	
}

//大写例子
package main

import (
	"encoding/json"
	"fmt"
)

//Student 学生
type Student struct {
	ID     int
	Gender string
	Name   string
}

//Class 班级
type Class struct {
	title    string
	Students []Student
}

//student的构造函数
func newStudent(id int, name string) Student {
	return Student{
		ID:   id,
		Name: name,
	}
}
func main() {
	//创建了一个班级变量
	c1 := Class{
		title:    "101",
		Students: make([]Student, 0, 200),
	}
	//往班级变量中添加学生

	for i := 0; i < 10; i++ {
		tmpStu := newStudent(i, fmt.Sprintf("stu%02d,", i))
		c1.Students = append(c1.Students, tmpStu)
	}
	fmt.Println(c1)
	//输出:{101 [{0  stu00,} {1  stu01,} {2  stu02,} {3  stu03,} {4  stu04,} {5  stu05,} {6  stu06,} {7  stu07,} {8  stu08,} {9  stu09,}]}
	//JSON序列化:结构体转化为JSON格式的字符串
	data, err := json.Marshal(c1)
	if err != nil {
		fmt.Println("json marshal failed")
		return
	}
	fmt.Printf("%T\n", data) //[]uint8
	//fmt.Println(data)//尽量不要采用这样的方式
	fmt.Println(string(data))
	
}

//小写例子,json包不能看到小写字段的,所以小写字段的不会被序列化

5.Umarshal函数 

//Student 学生
type Student struct {
	ID     int
	Gender string
	Name   string
}
//Class 班级
type Class struct {
	Title    string
	Students []Student
}
//student的构造函数
func newStudent(id int, name string) Student {
	return Student{
		ID:   id,
		Name: name,
	}
}
func main() {
	//JSON反序列化:JSON格式的字符串转化为结构体
	var c1 Class
	//str的内容使用反引号来标注的``
	str := `{"Title":"101","Students":[{"ID":0,"Gender":"男","Name":"stu00"},{"ID":1,"Gender":"男","Name":"stu01"},{"ID":2,"Gender":"男","Name":"stu02"},{"ID":3,"Gender":"男","Name":"stu03"},{"ID":4,"Gender":"男","Name":"stu04"},{"ID":5,"Gender":"男","Name":"stu05"},{"ID":6,"Gender":"男","Name":"stu06"},{"ID":7,"Gender":"男","Name":"stu07"},{"ID":8,"Gender":"男","Name":"stu08"},{"ID":9,"Gender":"男","Name":"stu09"}]}`
	err := json.Unmarshal([]byte(str), &c1) //第二个参数用来存放第一个参数的内容,c2需要被修改,想要被需改成功必须得传入指针
	if err != nil {
		fmt.Println("json unmarshal failed!")
		return
	}
	fmt.Println(c1)
	//输出:{101 [{0 男 stu00} {1 男 stu01} {2 男 stu02} {3 男 stu03} {4 男 stu04} {5 男 stu05} {6 男 stu06} {7 男 stu07} {8 男 stu08} {9 男 stu09}]}
}
//结构体大写例子
//Student 学生
type Student struct {
	ID     int
	Gender string
	Name   string
}
//Class 班级
type Class struct {
	title    string
	Students []Student
}
//student的构造函数
func newStudent(id int, name string) Student {
	return Student{
		ID:   id,
		Name: name,
	}
}
func main() {
	//JSON反序列化:JSON格式的字符串转化为结构体
	var c1 Class
	//str的内容使用反引号来标注的``
	str := `{"title":"101","Students":[{"ID":0,"Gender":"男","Name":"stu00"},{"ID":1,"Gender":"男","Name":"stu01"},{"ID":2,"Gender":"男","Name":"stu02"},{"ID":3,"Gender":"男","Name":"stu03"},{"ID":4,"Gender":"男","Name":"stu04"},{"ID":5,"Gender":"男","Name":"stu05"},{"ID":6,"Gender":"男","Name":"stu06"},{"ID":7,"Gender":"男","Name":"stu07"},{"ID":8,"Gender":"男","Name":"stu08"},{"ID":9,"Gender":"男","Name":"stu09"}]}`
	err := json.Unmarshal([]byte(str), &c1) //第二个参数用来存放第一个参数的内容,c2需要被修改,想要被需改成功必须得传入指针
	if err != nil {
		fmt.Println("json unmarshal failed!")
		return
	}
	fmt.Println(c1)
	//输出:{[{0 男 stu00} {1 男 stu01} {2 男 stu02} {3 男 stu03} {4 男 stu04} {5 男 stu05} {6 男 stu06} {7 男 stu07} {8 男 stu08} {9 男 stu09}]}
}
//小写例子

6.结构体标签Tag

Tag是结构体的元信息,可以在运行的时候通过反射的机制读取出来。 Tag在结构体字段的后方定义,由一对反引号包裹起来,具体的格式如下:
key1:"value1" key2:"value2"
结构体tag由一个或多个键值对组成。键与值使用冒号分隔,值用双引号括起来。同一个结构体字段可以设置多个键值对tag,不同的键值对之间使用空格分隔。
注意事项: 为结构体编写Tag时,必须严格遵守键值对的规则。结构体标签的解析代码的容错能力很差,一旦格式写错,编译和运行时都不会提示任何错误,通过反射也无法正确取值。例如不要在key和value之间添加空格。

到此这篇关于golang之标准库encoding/json包的文章就介绍到这了,更多相关GoLang encoding/json包内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: GoLang之标准库encoding/json包

本文链接: https://www.lsjlt.com/news/121019.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • GoLang之标准库encoding/json包
    目录1.JSON介绍2.JSON序列化、反序列化介绍3.encoding/json包介绍4.Marshal函数5.Umarshal函数 6.结构体标签Tag注:本文以Win...
    99+
    2022-11-11
  • Golang 标准库 tips之waitgroup详解
    WaitGroup 用于线程同步,很多场景下为了提高并发需要开多个协程执行,但是又需要等待多个协程的结果都返回的情况下才进行后续逻辑处理,这种情况下可以通过 WaitGroup 提供...
    99+
    2022-11-12
  • python标准库模块之json库怎么使用
    今天小编给大家分享一下python标准库模块之json库怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言json,...
    99+
    2023-07-02
  • python标准库模块之json库的基础用法
    目录前言作用loads,load的用法dumps,dump的用法结语前言 json,全称为JavaScript Object Notation,也就是JavaScript对象标记,通...
    99+
    2022-11-13
  • python之标准库
    Python的标准安装包括一组模块,称为标准库。10.1 模块>>>emport math>>>math.sin(0)0.010.1.1 模块是程序任何python程序都可以作为模块导入。#hello.p...
    99+
    2023-01-31
    标准 python
  • Python的标准模块包json详解
    引言 对于做web开发的人来说,json文本必须要熟知与熟练使用的。大部分网站的API接口调用返回的数据,就是json格式的。如果看json对象所包含的内容,相信对熟悉Python的人开说,很快就能把jso...
    99+
    2022-06-04
    详解 模块 标准
  • Python标准库之collections包的使用教程
    前言 Python为我们提供了4种基本的数据结构:list, tuple, dict, set,但是在处理数据量较大的情形的时候,这4种数据结构就明显过于单一了,比如list作为数组在某些情形插入的效率会比...
    99+
    2022-06-04
    标准 教程 Python
  • Python的json标准库怎么用
    本文小编为大家详细介绍“Python的json标准库怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python的json标准库怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、JSON基础概述1、J...
    99+
    2023-06-30
  • Python标准库之os
    文章目录 1. OS标准库简介2. OS标准库常用函数和属性2.1 文件和目录2.1.1 `os.getcwd()`2.1.2 `os.mkdir(path, mode=0o777, *, d...
    99+
    2023-09-04
    python linux 标准库 os 常用函数
  • Python标准库06之子进程 (subprocess包) 详解
    这里的内容以Linux进程基础和Linux文本流为基础。subprocess包主要功能是执行外部的命令和程序。比如说,我需要使用wget下载文件。我在Python中调用wget程序。从这个意义上来说,sub...
    99+
    2022-06-04
    之子 详解 进程
  • Golang标准库unsafe源码解读
    目录引言unsafe包unsafe构成type ArbitraryType inttype Pointer *ArbitraryType灵活转换潜在的危险性✅ 正确的使用姿势❌ 错误...
    99+
    2022-11-11
  • golang常用标准库有哪些
    golang常用标准库有fmt、io、net、os、time、sync、encoding、database/sql、unicode、math、crypto、runtime、flag、reflect和testing。详细介绍:1、fmt,提供...
    99+
    2023-12-14
    go语言 Golang Go标准库
  • Go 语言 JSON 标准库的使用
    目录序列化1. 结构体序列化2. 字典序列化3. 切片序列化反序列化1. 明确知道 JSON 格式2. 无法确定 JSON 格式Go 语言中的 encoding/json 库提供了复...
    99+
    2022-11-12
  • Python标准库之数据库 sqlite3
    目录1、创建数据库 2、插入数据3、查询4、更新与删除Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以搭配P...
    99+
    2022-11-12
  • Golang标准库syscall的示例分析
    小编给大家分享一下Golang标准库syscall的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、什么是系统调用In computing, a sys...
    99+
    2023-06-15
  • Python标准库学习之urllib
    本系列以python3.4为基础urllib是Python3的标准网络请求库。包含了网络数据请求,处理cookie,改变请求头和用户代理,重定向,认证等的函数。urllib与urllib2:python2.x用urllib2,而pytho...
    99+
    2023-01-31
    标准 Python urllib
  • python标准库压缩包模块zipfile和tarfile详解(常用标准库)
    目录常用的标准库zip格式ZipFile参数说明操作含义压缩方法常用方法tar包 和 gz、bz2、xz格式删除压缩包中的文件常用的标准库 在我们常用的系统windows和Linux...
    99+
    2022-11-11
  • 深入解析golang中的标准库flag
    Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。 os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args...
    99+
    2022-11-12
  • Golang必备:常用标准库大揭秘!
    Golang必备:常用标准库大揭秘!概述:Golang(或称为Go)是一门由Google开发的开源编程语言,因其简洁、高效和强大的并发能力而备受开发者青睐。作为一门现代化的编程语言,Golang拥有丰富的标准库,这些库涵盖了各种不同的领域和...
    99+
    2023-12-29
    Golang 标准库 大揭秘
  • Golang标准库和外部库的性能比较
    目录1、路由2、JSON 序列化和反序列化3、是否使用ORM框架4、总结前言: 我已经在生产中使用 Go 一段时间了,因为它的构建规模较小,并且由 goroutines 提供的并发性...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作