Go语言使用之JSO使用、源码解析和JSON工具类

本文介绍了Go语言中如何使用JSON进行数据交换,包括基本介绍、数据格式说明、在线与线下解析工具,以及序列化和反序列化的详细步骤。通过示例展示了结构体、map和切片的JSON序列化和反序列化,同时讨论了结构体字段自定义key的tag标签使用。
摘要由CSDN通过智能技术生成

在go语言网络编程中,经常会有这样的需求:保存结构体和读取结构体数据。如果你使用redis数据库存储数据,你怎么做?Redis仅支持五种数据类型( String(字符串) 、Hash (哈希)、List(列表)、Set(集合) 和zset(sorted set:有序集合)),不包括结构体,不能直接存储结构体。如果可以转换为五种数据类型之一,问题就简单了。

本篇文章分析,如何使用JSON处理数据。

一、JSON 基本介绍

  1. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

  2. 易于人阅读和编写。同时也易于机器解析和生成。 JSON是在2001年开始推广使用的数据格式,目前已经成为主流的数据格式。

  3. JSON易于机器解析和生成,并有效地提升网络传输效率,通常程序在网络传输时会先将数据(结构体、map等)序列化成json字符串,到接收方得到json字符串时,在反序列化恢复成原来的数据类型(结构体、map等) 。这种方式已然成为各个语言的标准

这里写图片描述

二、JSON数据格式说明

任何的数据类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组, map, 结构体等.
JSON 键值对是用来保存 数据一种方式,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值.

如下示例:

[{"key1":val1, "key2":val2, "key3" : val3, "key4":[val4, val5]},
{"key1":val1, "key2":val2, "key3" : val3, "key4":[val4, val5]}]
{"firstName": "Json"}
{"name": "tom", "age": 18, "address":["北京", "上海"]}
[{"name": "tom", "age": 18, "address":["北京", "上海"]},
{"name": "mary", "age": 28, "address":["广州", "深圳"]}]

三、JSON解析工具:

线上网站推荐:https://www.json.cn/ 网站可以验证一个json格式的数据是否正确
线下工具:HiJson 2.1.2_jdk64

四、json序列化go中数据

1、介绍

json序列化是指,将有key-value结构的数据类型(比如结构体、map、切片)序列化成json字符串的操作。

2、源码语法

2.1 type Marshaler

type Marshaler interface {
    MarshalJSON() ([]byte, error)
}
实现了Marshaler接口的类型可以将自身序列化为合法的json描述。

2.2 func Marshal

func Marshal(v interface{}) ([]byte, error)
Marshal函数返回v的json编码。

Marshal函数会递归的处理值。如果一个值实现了Marshaler接口切非nil指针,会调用其MarshalJSON方法来生成json编码。nil指针异常并不是严格必需的,但会模拟与UnmarshalJSON的行为类似的必需的异常。

否则,Marshal函数使用下面的基于类型的默认编码格式:

布尔类型编码为json布尔类型。

浮点数、整数和Number类型的值编码为json数字类型。

字符串编码为json字符串。角括号"<"">"会转义为"\u003c""\u003e"以避免
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值