数据存储之文件存储(二)-JSON文件存储

原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080
本次代码的环境:
运行平台: Windows
Python版本: Python3.x
IDE: PyCharm

一 概述

本篇文章主要讲的是JSON文件存储,其中包括JSON库中两个重要函数:loads()-将JSON文本字符串转化为JSON对象dumps()-将JSON对象转化为文本字符串;在这两个函数的基础上,会讲解JSON的读取JSON的输出;同时为了更加清楚的认识JSON格式,还会和数组类型进行对比
在这里插入图片描述

二 详细讲解

2.1 对象和数组辨析

那接下来就开始正式讲解:

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊。

因此对象和数组在此需要进行辨析:

  • 对象:它在JavaScript中是使用花括号{ }包裹起来的部分,数据结构为{key1: value1, key2:value2, …}的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示,值的类型可以是任意类型。
  • 数组:数组在JavaScript中是方括号[]包裹起来的部分,数据结构为[“A” ,“B”,“C”,“D”…],的索引结构。在JavaSecript中,数组是一种比较特殊的数据类型,它也可以通过键值对进行使用,也可以通过索引进行使用。同样,值的类型可以是任意类型。
    这里给出一个常见的JSON对象

 [
    {
        "姓名" : "张三",
        "性别" : "男",
        "年龄":"15"
    },
    {
        "姓名" : "李四",
        "性别" : "男",
        "年龄":"16"
    },
    {
        "姓名" : "王二麻子",
        "性别" : "男",
        "年龄":"17"
    }
]

由[]包围就相当于列表类型,列表中的每个元素字典类型。同时JSON可以由以上两种形式自由组合而成,可以无限次嵌套、结构清晰即可。

2.2 JSON读取

Python提供了JSON库来实现对JSON文件的读写操作,可以通过调用JSON库的loads()方法将JSON文本字符串转为JSON对象,也可以通过dumps()函数将JSON对象转为文本字符串
以下代码的例子就是将str类型的JSON字符串转化为JSON对象:

import json

str = '''
[{
       "姓名" : "张三",
       "性别" : "男",
       "年龄":"15"
   },
   {
       "姓名" : "李四",
       "性别" : "男",
       "年龄":"16"
   },
   {
       "姓名" : "王二麻子",
       "性别" : "男",
       "年龄":"17"
}]
'''
print(type(str))
data = json.loads(str)
print(data)
print(type(data))

运行结果为:

<class 'str'>
[{'姓名': '张三', '性别': '男', '年龄': '15'}, {'姓名': '李四', '性别': '男', '年龄': '16'}, {'姓名': '王二麻子', '性别': '男', '年龄': '17'}]
<class 'list'>

因为最外面是由[]包裹,所以最终的类型应该是列表类型,这样可以通过列表的访问方法来访问JSON对象里面的内容:

data[0]['姓名']
或者是
data[0].get('姓名')

一般通过get()方法来获取对应键的值,应为如果键名不存在,也不会保错,只会返回None值。而且也可以通过在get方法中定义第二个参数,当键名不存在时就会返回第二个参数值:data[0].get(‘年龄’,35)
注意了:当遇到这个代码报错时:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 3 column 9 (char 12)

这样是因为,JSON的数据需要用双引号包围,不能用单引号。即如果使用以下形式loads()方法会解析失败,就会报错:

[{
        '姓名' : '张三',
        '性别' : '男',
        '年龄':'15'
 }]

2.2 JSON数据输出

通过调用json库中的dumps()方法可以将JSON对象转化为字符串。然后写入扩展名为.json的文件中,如下代码:

import json

str = '''
[{
       "姓名" : "张三",
       "性别" : "男",
       "年龄":"15"
   },
   {
       "姓名" : "李四",
       "性别" : "男",
       "年龄":"16"
   },
   {
       "姓名" : "王二麻子",
       "性别" : "男",
       "年龄":"17"
}]
'''
with open('data.json','w',encoding = 'utf-8') as file:
   file.write(json.dumps(str,indent = 2,ensure_ascii = False))

如上面的代码,在json.dumps()方法中添加属性indent,代表缩进字符个数,这样得到的内容会自动带缩进,格式会更加清晰。对于上面这个例子,JSON中包含了中文字符,同样在json.dumps()中添加ensure_ascii = False属性来规定输出的编码格式。

三 总结

这篇文章的内容主要介绍了文本文件之JSON文件的存储,其中包括JSON格式的基本介绍、JSON和数组的区别、JSON数据的读取,JSON数据写入到扩展名为.json的文件中等内容。以上内容参考资料:崔庆才《Python3 网络爬虫开发实战》,夏敏捷《Python程序设计-从基础到开发》,[挪]芒努斯·利·海特兰德(Magnus Lie Hetland)《Python基础教程第3版 Python编程从入门到实践 》,并对以上作者表示感谢。这篇文章就到这里了,欢迎大佬们多批评指正,也欢迎大家积极评论多多交流。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42555080/article/details/86705769
今日推荐