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文件存储相关推荐

  1. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

  2. python爬虫学习笔记 1.9 (Handler处理器 和 自定义Opener)

    python爬虫学习笔记 1.1(通用爬虫和聚焦爬虫) python爬虫学习笔记 1.2 ( HTTP和HTTPS ) python爬虫学习笔记 1.3 str和bytes的区别 python爬虫学习 ...

  3. python爬虫学习笔记 3.9 (了解参考:训练Tesseract)

    python爬虫学习笔记 3.9 (了解参考:训练Tesseract) 参考阅读:训练Tesseract 要使用 Tesseract 的功能,比如后面的示例中训练程序识别字母,要先在系统中设置一 个新 ...

  4. python爬虫学习笔记3.2-urllib和request练习

    python爬虫学习笔记3.2-urllib和request练习 一.urllib练习 1.百度贴吧案例 需求 分析 手动测试查询流程 观察页面 分析特殊部分 https://tieba.baidu. ...

  5. python爬虫学习笔记2模拟登录与数据库

    前言 为了加入学校里面一个技术小组,我接受了写一个爬取学校网站通知公告的任务.这个任务比以前写的爬虫更难的地方在于,需要模拟登录才能获得页面,以及将得到的数据存入数据库. 本文按照日期来记录我完成任务 ...

  6. Python爬虫学习笔记总结(一)

    〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大家可以 ...

  7. 一入爬虫深似海,总结python爬虫学习笔记!

    正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...

  8. 一入爬虫深似海,总结python爬虫学习笔记! 1

    正文 〇. python 基础 先放上python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于python 3 基础语法方面的东西,网上有很多,大 ...

  9. Python爬虫学习笔记:概念、知识和简单应用

    Python爬虫:概念.知识和简单应用 什么是爬虫? 使用的开发工具 一个简单的爬虫实例 Web请求过程分析 HTTP协议 请求头中的重要内容 响应头中的重要内容 请求方式 requests 安装 G ...

最新文章

  1. 请教context:component-scan/和mvc:annotation-driven/的区别20
  2. python变量如何使用,python如何使用变量
  3. php toupper,jquery如何进行字母大小写转换?
  4. Python下载安装
  5. 如何构建一套高性能、高可用性、低成本的视频处理系统?
  6. 在日常维护管理中对MySQL 日志的需求
  7. web前端基础(09html5多媒体)
  8. getchar() 和getch()
  9. 离散数学 (屈婉玲)集合部分 笔记
  10. Indesign CS6怎么添加框线_InDesign用插件快速给文本文字添加拼音的方法
  11. Unity中获取AnimationClip的关键帧信息
  12. 在Namesilo上注册域名
  13. 卡通人物数据集下载地址
  14. 第七十四章 Caché 函数大全 $WREVERSE 函数
  15. 嵌入式系统项目设计——基于LED、按键、蜂鸣器的打地鼠游戏(完整代码)
  16. Mockito快速使用教程
  17. 记 安装单机版 腾讯 蓝鲸智云
  18. 牛客网数据库SQL实战60—— 统计salary的累计和running_total
  19. php判断是不是顺子,php 怎么判断为顺子,三个相邻的数字
  20. Proxy与Reflect详解

热门文章

  1. 014_html折行
  2. python turtle怎么用变量_Python Turtle绘图指定变量时出现问题
  3. cygwin编译verilator_Sublime text3 + Verilator 实现自动语法检错
  4. VMware 修改虚拟机网络_虚拟机问题解决
  5. 产品经理_(pm)—原型设计软件_Axure 9_axure rp pro 9.0中文破解版安装
  6. 向量空间和计算机科学与技术,向量空间
  7. 阿尔法蛋机器人tf卡_如父母般陪着你长大,科大讯飞阿尔法蛋智能故事机Z1体验...
  8. 深入理解JVM虚拟机(八):编译器优化
  9. Windows安装python3.6.x版本
  10. UML 对象模型图阅读指南 (转)