简介:
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率
语法:
-
对象表示为键值对
-
数据由逗号分隔
-
花括号保存对象
-
方括号保存数组
为了生成和解析JSON数据,有两种编程模型,类似于用于XML文档的编程模型。
-
对象模型创建一个表示内存中JSON数据的树。然后可以导航,分析或修改树。这种方法最灵活,允许进行需要访问树的完整内容的处理。但是,它通常比流模型慢,需要更多内存。对象模型通过一次导航整个树来生成JSON输出。
-
流模型使用基于事件的解析器,一次读取一个元素的JSON数据。当对象或数组开始或结束,找到键或找到值时,解析器生成事件并停止处理。应用程序代码可以处理或丢弃每个元素,然后解析器继续执行下一个事件。这种方法适用于本地处理,其中元素的处理不需要来自其余数据的信息。流模型通过一次使用一个元素进行函数调用来生成给定流的JSON输出。
对象模型:在内存中创建一个映射json数据的树,这种方式是将数据全部存在内存中,随时通过递归查找的方式,来遍历数据树的每一个节点,来导航整个树生成和解析json数据。这种方式因为树的多节点性变得很灵活,但要遍历整棵树,或者每次都要递归来查找,速度慢。
流模型:流模型基于事件解析器,一次只读取一个元素的json数据。当有数据时解析器找到值或者键并生成事件,然后处理事件,随后继续解析器执行下一个事件,如此重复知道数据处理结束。这种方法消耗内存少,读取后处理释放,不占用过多内存;并且一次使用一个元素进行函数调用来生成给定流的JSON输出速度相对快。
参考:
https://javaee.github.io/tutorial/jsonp001.html
https://baike.baidu.com/item/JSON/2462549?fr=aladdin