java/json 生成和解析数据的两种编程模型

简介:

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率

语法:

在 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

原文地址:https://www.cnblogs.com/lijianxuan/p/10643013.html