JSON介绍
JSON是一种广泛使用的半结构化序列化协议,广泛使用于前后端通信,半结构化数据保存,项目配置等领域.由于其应用极广,所以几乎每门相对现代些的编程语言中都会有用于解析它的标准库.因此其使用起来学习成本很低.在数据科学领域中JSON也是最常见的数据序列化形式之一.
JSON的表现形式
一个典型的JSON数据如下:
{
"name":"小明",
"age":18,
"gender": "male"
}
JSON中的类型
JSON来自于javascript,因此值类型也沿用javascript中的定义.JSON中定义的数据类型包括boolean
,string
,number
,null
,array
和object
.其中boolean
,string
,number
,null
是最基本的数据类型,而array
和object
则是容器结构.广义上来说只要数据是上面的任意一种类型的都是满足定义的JSON数据,但一般JSON数据都是array
或object
的形式.需要注意的是和js中不同,object
键必须是string
.
-
object
使用{}
包裹,里面是键值对的形式{ "key1": "value1", "key2": "value2" }
-
array
使用[]
包裹,里面是成员对象[ "first", "second", "third" ]
-
number
在JSON中也不区分整数和浮点数42 3.1415926
-
string
在JSON中字符串只能使用""
包裹"This is a string"
-
boolean
在JSON中布尔型数据只有两个取值,既true
和false
-
null
在JSON中统一使用null
表示空值
JSON的性能特点和适用范围
JSON是基于文本的序列化协议,这也意味着它序列化后数据会比较大,同时由于它无固定schema,因此相对的比较灵活可读,同时一般序列化和反序列化速度会相当快.JSON非常适合用在调试阶段,在业务未定型时使用JSON可以大大降低后期由于数据结构定义修改造成的时间和人力投入;但另一个角度来说,由于无固定schema,灵活性会带来维护上的额外成本,一旦没有跟上代码管理很容易造成一些维护上的麻烦.
使用messagepack代替JSON
在作为序列化协议方面,一种渐进式的方案是在业务稳定后使用msgpack代替json充当序列化协议.msgpack可以看作是二进制版本的JSON,它的序列化结果是二进制数据而非纯文本,同时由于对结构进行了额外优化,messagepack序列化后的结果会小很多,基本可以接近protobuffer.当然代价是messagepack的序列化和反序列化会慢一些.在我们需要无固定schema形式的的序列化协议时msgpack是一个好选择
使用YAML代替JSON
在作为配置配置文件格式方面,通常我们会用YAML来代替JSON,这是因为YAML可以完全包含JSON的信息,同时可以通过引用语法提取出重复部分以减少大量代码.Docker-compose,OpenAPI等知名项目都使用YAML.