7.3.3 高维数据的存储与读写
二维数据可以看成一维数据的集合,三维数据可以看成二维数据的集合,以此类推,但是以这样层层嵌套的方式组织数据,会让高维数据的表示非常复杂,为了直观地表示数据间复杂的组织关系,一般在表示高维数据时不采用结构化的形式,而是用最基本的二元关系,即以键值对的形式进行格式化。
网络上传递的数据大都是高维数据,JSON(JavaScript Object Notation)是网络中最常见的高维数据格式,它是一种轻量级的数据交换格式,它的本质是一种被格式化了的字符,即易于人类阅读和编写,也易于机器解析和生成。在网络中常用JSON对高维数据进行表达和存储。JSON表示键值对的基本格式,如"key":"value"。
JSON存储数据应遵循以下语法规则。
①数据存储在键值对中,如"学号":"20200001"。
②键值对之间用英文逗号隔开,如"学号":"20200001","姓名":"张华"。
③大括号用于保存一个JSON对象,如{"学号":"20200001","姓名":"张华"}。
④方括号用于保存一组对象集合,即键值对数据组成的数组,如:
从最外层看,这个数据首先是一个键值对,key是"计算机科学与技术2020学生",value与key之间用冒号连接,value本身是一个数组,这个数组中存储了多名学生的信息,每个学生的信息都用一个大括号括起来。
采用对象、数组方式组织起来的键值对可以表示任何结构的数据,这为计算机组织复杂数据提供了极大的便利。目前,万维网上使用的高维数据主要是JSON和XML。
拓展:
XML(eXtensible Markup Language,可扩展标记语言)是W3C推荐的一种标准,它为在Internet上传送及携带数据信息提供标准格式,它用成对的标签来表示键值对,如:
XML与JSON都可以表示高维数据,但是XML对key值要存储两次<key></key>,而JSON只需要存储一次,且在数据交换时产生更少的网络带宽和存储需求,因此比XML更为常用。
使用JSON存储数据时,需要先导入json库(import json)。
json库主要包括两类函数,即操作类函数和解析类函数。操作类函数主要完成外部JSON格式和程序内部数据类型之间的转换功能,解析类函数主要用于解析键值对内容。JSON格式包括对象和数组,分别用大括号“{}”和方括号“[]”表示,对应键值对的组合关系和对等关系。与Python数据类型进行转换时,一般来说JSON格式对应的对象将被json库解析成字典,数组被解析成列表。
json库包含两个过程,即编码(encoding)和解码(decoding)。编码是将Python数据类型转换为JSON格式的过程,解码是从JSON格式中解析数据到对应的Python数据类型的过程。编码与解码实质上是数据类型序列化和反序列化的过程。JSON操作函数如表7-6所示。
表7-6 JSON操作函数
json.dumps()中的obj可以是Python的列表或字典类型,当输入字典时,dumps()将其转换为JSON格式字符串。默认是顺序存放,sort_keys可以对字典按照key进行排序,控制输出。indent用于增加数据缩进,使生成的JSON格式字符串更具可读性。由于JSON库默认采用Unicode编码处理非西文字符,因此涉及中文时,想要正常读取中文,需要加上ensure_ascii=False。
Python数据类型与JSON互转:
运行结果:
利用JSON读取文件、写入文件:
运行结果:
同时会创建文件js1.json。