JSON的使用场景及注意事项介绍

上篇我们讲解了JSON的诞生原因是因为XML整合到HTML中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Douglas Crockford) 和 奇普·莫宁斯达(Chip Morningstar)一起从JS的数据类型中提取了一个子集,作为新的数据交换格式,因为主流的浏览器使用了通用的JavaScript引擎组件,所以在解析这种新数据格式时就不存在兼容性问题,于是他们将这种数据格式命名为 “JavaScript Object Notation”,缩写为 JSON,由此JSON便诞生了!

今天我们来学习一下JSON的结构形式、数据类型、使用场景以及注意事项吧!

一、JSON格式

上面我们知道JSON是从JavaScript的数据类型中提取出来的子集,那JSON有几种结构形式呢?又有哪些数据类型呢?他们又分别对应着JavaScript中的哪些数据类型呢?

1.JSON的2种结构形式

1、键值对形式

上期我们举了一个JSON的实例,就是键值对形式的,如下:

{ "person": { "name": "pig", "age": "18", "sex": "man", "hometown": { "province": "江西省", "city": "抚州市", "county": "崇仁县" } } }

这种结构的JSON数据规则是:一个无序的“‘名称/值’对”集合。一个对象以 {左括号 开始, }右括号 结束。每个“名称”后跟一个 :冒号 ;“‘名称/值’ 对”之间使用 ,逗号 分隔,。

在这里插入图片描述


2、数组形式
因为大多数时候大家用的JSON可能都是上面那种key-value形式,所以很多人在讲解JSON的时候总是会忽略数组形式,这一点是需要注意的。

那JSON的数组形式是怎么样的呢?猪哥也举一个实例吧!

["pig", 18, "man", "江西省抚州市崇仁县"]

数组形式的JSON数据就是值(value)的有序集合。一个数组以 [左中括号 开始, ]右中括号 结束。值之间使用 ,逗号 分隔。

在这里插入图片描述

2.JOSN的6种数据类型

上面两种JSON形式内部都是包含value的,那JSON的value到底有哪些类型,而且上期我们说JSON其实就是从Js数据格式中提取了一个子集,那具体有哪几种数据类型呢?

string:字符串,必须要用双引号引起来。

number:数值,与JavaScript的number一致,整数(不使用小数点或指数计数法)最多为 15 位。小数的最大位数是 17。

object:JavaScript的对象形式,{ key:value }表示方式,可嵌套。

array:数组,JavaScript的Array表示方式[ value ],可嵌套。

true/false:布尔类型,JavaScript的boolean类型。

null:空值,JavaScript的null。

在这里插入图片描述


以上数据形式图片来源JSON官方文档:

二、JSON使用场景

介绍完JSON的数据格式,那我们来看看JSON在企业中使用的比较多的场景。

1.接口返回数据

JSON用的最多的地方莫过于Web了,现在的数据接口基本上都是返回的JSON,具体细化的场景有:

Ajxa异步访问数据

RPC远程调用

前后端分离后端返回的数据

开放API,如百度、高德等一些开放接口

企业间合作接口

这种API接口一般都会提供一个接口文档,说明接口的入参、出参等,

在这里插入图片描述


一般的接口返回数据都会封装成JSON格式,比如类似下面这种

{ "code": 1, "msg": "success", "data": { "name": "pig", "age": "18", "sex": "man", "hometown": { "province": "江西省", "city": "抚州市", "county": "崇仁县" } } } 2.序列化

程序在运行时所有的变量都是保存在内存当中的,如果出现程序重启或者机器宕机的情况,那这些数据就丢失了。一般情况运行时变量并不是那么重要丢了就丢了,但有些内存中的数据是需要保存起来供下次程序或者其他程序使用。

保存内存中的数据要么保存在数据库,要么保存直接到文件中,而将内存中的数据变成可保存或可传输的数据的过程叫做序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

正常的序列化是将编程语言中的对象直接转成可保存或可传输的,这样会保存对象的类型信息,而JSON序列化则不会保留对象类型!

为了让大家更直观的感受区别,猪哥用代码做一个测试,大家一目了然

在这里插入图片描述

Python对象直接序列化会保存class信息,下次使用loads加载到内存时直接变成Python对象。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgddw.html