【Python爬虫学习笔记6】JSON文件存储
JSON简介
JSON(全称JavaScript Obejct Notation,JavaScript对象标记),基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式,通过对象和数组的组合来表示数据,构造方法简洁且其结构化程度高,是一种轻量级的数据交换格式。
在JSON中,支持很多数据类型,包括有对象、数组、整型、浮点型、布尔型、NULL类型以及字符串类型(由于是JSON基于ES,在python中,字符串必须要用双引号,不能用单引号),而这些多个数据之间使用逗号分开。不过从本质上来说,JSON就是一个字符串。
在这些所支持的数据类型里,对象和数组是比较特殊且常用的两种类型:
对象:在JavaScript中使用花括号{}包裹起来的内容,数据结构为{key:value…}的键值对结构,类似于python中的字典。
数组:在JavaScript中使用方括号[]包裹起来的内容,数据结构为[element1,element2…]的索引结构,类似于python中的列表。
JSON可以由以上两种形式自由组合而成,并且可以无限次嵌套,是数据交换的极佳方式。
例如,一个JSON对象可以写为如下形式:
[{
"username":"UnikFox",
"age":20,
"country":"China"
},{
"username":"Luna",
"age":16,
"country":"Britain"
}
]
为方便查看JSON数据,我们可以借助一个专门用于解析JSON数据的网址(https://www.json.cn/),将我们所要解析的JSON文本复制到左边的输入框,右边的显示框便会动态实时格式化显现,同时还能检查输入的文本是否符合JSON语法并给出提示。
JSON数据的写入和读取
在python中,我们可以很轻松地使用内置的json库来完成对JSON数据的相关操作。常用的操作是写入和读取,接下来我们对此分别进行介绍。
在此之前,我们先来做一些准备工作。
#导入json库 import json#设置一个用于JSON对象操作的列表 persons = [{'username':'UnikFox','age':20,'country':'China'},{'username':'Luna','age':16,'country':'Britain'} ]
1.JSON数据的写入
json库中提供了dumps()和dump()两种方法来进行数据写入,其中前者适用于将python对象转化为JSON字符串,而后者则可以将python对象写入json文件。
##json库写入操作# 利用dumps()方法将python对象转化为json字符串 json_str = json.dumps(persons) print(type(json_str)) #<class 'str'> print(json_str) #[{"username": "UnikFox", "age": 20, "country": "China"}, {"username": "Luna", "age": 16, "country": "Britain"}]# 利用dump()方法将python对象存储到json文件中 with open('person.json','w',encoding='utf-8') as fp:json.dump(persons,fp,ensure_ascii=False)
这里要说明的地方有两处:1.有时候我们的字符串为中文,因此在打开文件时需要设置编码encoding;2.json文件的写入默认为Unicode编码,在写入数据后会自动转化为unicode字符,为方便中文的显示,我们需要关闭其默认编码’ensure_ascii=False’。
person.json文件内容(这里我们可以看到,json写入时自动地帮我们格式化了数据,将原本地单引号转化为了双引号)
[{"username": "UnikFox", "age": 20, "country": "China"}, {"username": "Luna", "age": 16, "country": "Britain"}]
2.JSON数据的读取
和写入操作类似,json库提供了loads()和load()两种方法,前者为从JSON字符串转化为python对象,而后者则是从文件中获取python对象。
##json库读取操作# 使用loads()方法将json字符串转化为python对象 json_str = '[{"username": "UnikFox", "age": 20, "country": "China"}, {"username": "Luna", "age": 16, "country": "China"}]' persons = json.loads(json_str) print(persons) #[{"username": "UnikFox", "age": 20, "country": "China"}, {"username": "Luna", "age": 16, "country": "Britain"}]# 利用load()方法从json文件中读取数据并存储为python对象 with open('person.json','r',encoding='utf-8')as fp:persons = json.load(fp)print(type(persons)) #<class 'list'>print(persons) #[{'username': 'UnikFox', 'age': 20, 'country': 'China'}, {'username': 'Luna', 'age': 16, 'country': 'Britain'}]
以上便是有关JSON文件存储的简单介绍和基本使用,更详细的内容可以参考官方文档:https://docs.python.org/3.6/library/json.html
转载于:https://www.cnblogs.com/Unikfox/p/9690476.html
【Python爬虫学习笔记6】JSON文件存储相关推荐
- Python爬虫学习笔记 -- 爬取糗事百科
Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...
- python爬虫学习笔记 1.9 (Handler处理器 和 自定义Opener)
python爬虫学习笔记 1.1(通用爬虫和聚焦爬虫) python爬虫学习笔记 1.2 ( HTTP和HTTPS ) python爬虫学习笔记 1.3 str和bytes的区别 python爬虫学习 ...
- python爬虫学习笔记 3.9 (了解参考:训练Tesseract)
python爬虫学习笔记 3.9 (了解参考:训练Tesseract) 参考阅读:训练Tesseract 要使用 Tesseract 的功能,比如后面的示例中训练程序识别字母,要先在系统中设置一 个新 ...
- python爬虫学习笔记3.2-urllib和request练习
python爬虫学习笔记3.2-urllib和request练习 一.urllib练习 1.百度贴吧案例 需求 分析 手动测试查询流程 观察页面 分析特殊部分 https://tieba.baidu. ...
- python爬虫学习笔记2模拟登录与数据库
前言 为了加入学校里面一个技术小组,我接受了写一个爬取学校网站通知公告的任务.这个任务比以前写的爬虫更难的地方在于,需要模拟登录才能获得页面,以及将得到的数据存入数据库. 本文按照日期来记录我完成任务 ...
- Python爬虫学习笔记总结(一)
〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大家可以 ...
- 一入爬虫深似海,总结python爬虫学习笔记!
正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...
- 一入爬虫深似海,总结python爬虫学习笔记! 1
正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...
- Python爬虫学习笔记:概念、知识和简单应用
Python爬虫:概念.知识和简单应用 什么是爬虫? 使用的开发工具 一个简单的爬虫实例 Web请求过程分析 HTTP协议 请求头中的重要内容 响应头中的重要内容 请求方式 requests 安装 G ...
最新文章
- 请教context:component-scan/和mvc:annotation-driven/的区别20
- python变量如何使用,python如何使用变量
- php toupper,jquery如何进行字母大小写转换?
- Python下载安装
- 如何构建一套高性能、高可用性、低成本的视频处理系统?
- 在日常维护管理中对MySQL 日志的需求
- web前端基础(09html5多媒体)
- getchar() 和getch()
- 离散数学 (屈婉玲)集合部分 笔记
- Indesign CS6怎么添加框线_InDesign用插件快速给文本文字添加拼音的方法
- Unity中获取AnimationClip的关键帧信息
- 在Namesilo上注册域名
- 卡通人物数据集下载地址
- 第七十四章 Caché 函数大全 $WREVERSE 函数
- 嵌入式系统项目设计——基于LED、按键、蜂鸣器的打地鼠游戏(完整代码)
- Mockito快速使用教程
- 记 安装单机版 腾讯 蓝鲸智云
- 牛客网数据库SQL实战60—— 统计salary的累计和running_total
- php判断是不是顺子,php 怎么判断为顺子,三个相邻的数字
- Proxy与Reflect详解
热门文章
- 014_html折行
- python turtle怎么用变量_Python Turtle绘图指定变量时出现问题
- cygwin编译verilator_Sublime text3 + Verilator 实现自动语法检错
- VMware 修改虚拟机网络_虚拟机问题解决
- 产品经理_(pm)—原型设计软件_Axure 9_axure rp pro 9.0中文破解版安装
- 向量空间和计算机科学与技术,向量空间
- 阿尔法蛋机器人tf卡_如父母般陪着你长大,科大讯飞阿尔法蛋智能故事机Z1体验...
- 深入理解JVM虚拟机(八):编译器优化
- Windows安装python3.6.x版本
- UML 对象模型图阅读指南 (转)