json 基础学习

Posted by 周思进 on July 3, 2022

最近工作真的太忙了…

前文先简单学习了下 json schema,结果后头看到有很好的中文版么…

JSON Schema 规范(中文版)
https://json-schema.apifox.cn/

实际我日常工作都没涉及过写 json 的,但还是有必要来学习下~
下面是看《JSON必知必会》做的一点笔记。


一、啥是 JSON

JSON 是一种数据交换格式,其内容就是一串字符串,它可以解决在不同系统间的数据兼容性问题,如32位系统向64位系统传递二进制结构体,那可能就存在像 long 型这类字节长度有差异而拷贝出错的情况。

另外就是编程接口入参如果是结构体,但这个结构体后期如经常变动,就会导致和原有调用方在接口上不兼容,基本只能靠新增新的对外接口来接口,而如果使用 json 这种格式作为入参,则会灵活很多。


二、JSON 的基础语法

JSON 是由一系列的键值对(或属性-值对)组成,键和值之间通过冒号隔开,属性名称统一需要用双引号包裹。

一个 JSON 对象通过大括号包裹,它可以包含多个键值对,不同键值对之间通过逗号隔开。

{
    "name":"一周思进",
    "age":30
}

如果有多个对象,可以用数组包含,如下:

[
    {"name":"xiaowang"},
    {"name":"xiaogang"}
]


JSON 的属性值可以是字符串、数字、布尔值、null、对象或者数组。 如果是字符串,则用双引号包裹;如果是数字,则直接写数字即可;布尔值只能是 true 和 false;对象则需要用大括号包裹;数组则需要用中括号包括,如下:

{
	"name": "xiaoying",
	"age": 30,
	"work": true,
	"address": {
		"country": "CN",
		"city": "HZ"
	},
	"like": ["swim", "sleep"]
}


想确认自己写的 JSON 是否正确,可以通过如下网站辅助查看
1、https://jsoneditoronline.org/ (这个好用,实时反馈)
2、https://jsonformatter.curiousconcept.com/
3、https://jsonlint.com/

如要把 JSON 对象写到文件里,对应的文件名使用 .json 扩展名。


三、JSON 序列化和反序列化

1、序列化

如前面看到的都是 JSON 对象,实际传递时都需要转成字符串来进行传递,将 JSON 对象转换成字符串的过程就叫做序列化。

如上面最后写的 JSON 对象转换成字符串后(前面第一个辅助网站即可转换),如下:

{"name":"xiaoying","age":30,"work":true,"address":{"country":"CN","city":"HZ"},"like":["swim","sleep"]}

2、反序列化
反序列化自然就是将上述字符串重新转换成 JSON 对象。