2.JSON文件存储

全称为JavaScript Object Notation 通过对象和数组的组合来表示数据,构造简洁且结构化程度非常高。
是一种轻量级的数据交换格式

2.1 对象和数组

在JavaScript中 一切皆对象。 因此任何类型都可以通过json来表示,如 字符串,数字,对象,数组等

对象 : 在JavaScript中使用{}括起来 数据结构为{key1:value,key2:value2...}的键值对结构
在面向对象中 key为对象的属性,value为对应的值,键名可以使用整数和字符串表示,值的类型可以是任意类型。
数组 : 数组在JavaScript中使用方括号[] 括起来 数据结构为["java","JavaScript","Python"...]索引结构。
在JavaScript中数组是一种比较特殊的数据类型,可以像对象那样使用键值对,更多的是索引,值可以是任意类型。

示例:

[{
"name" : "Bod",
"gender" : "male",
"birrhday" : "1992-10-19"
},{
"name" : "Selina",
"gender" : "female",
"birthday" : "1995-10-18"
}]

JSON 可以是以上两种形式自由组合,无限次嵌套,结构清晰,数据交换的极佳方式。

2.2 读取JSON

Python为我们提供了简易的JSON库实现JSON文件的读写操作。
可以调用 loads()方法将JSON文本字符串转为JSON对象,
dumps() 方法将JSON对象转为文本字符串

示例:

import json
str1 = '''
[{
"name" : "Bod",
"gender" : "male",
"birrhday" : "1992-10-19"
},{
"name" : "Selina",
"gender" : "female",
"birthday" : "1995-10-18"
}]
'''
print(type(str1))#str
data = json.loads(str1)
print(data)
print(type(data))#list

通过索引来获取对应的内容 例如 第一个元素的name属性

print(data[0]['name'])
print(data[0].get('name'))

推荐第二种方式 get()方法 如果键名不存在 不会报错 返回None 另外可以传入第二个参数 默认值

print(data[0].get('age'))
print(data[0].get('age',20))

注意: JSON的数据需要用双引号括起来 不能使用单引号

示例:

import json
str1 = '''
[{
'name' : 'Bod',
'gender' : 'male',
'birrhday' : '1992-10-19'
},{
'name' : 'Selina',
'gender' : 'female',
'birthday' : '1995-10-18'
}]
''' data = json.loads('str1')

报错 解析错误

如何读取文本文件json内容

import json

with open('data.json','r') as file:
str1 = file.read()
data = json.loads(str1)
print(data)

2.3 输出JSON

调用 dumps() 将JSON对象转化为字符串

示例:

import json

data = [{
"name" : "Bod",
"gender" : "male",
"birrhday" : "1992-10-19"
}]
with open('data.json','w') as file:
file.write(json.dumps(data,indent=2))#indent 缩进字符个数

如果JSON包含中文字符

示例:

import json

data = [{
"name" : "小米",
"gender" : "男",
"birrhday" : "1992-10-19"
}]
with open('data.json','w') as file:
file.write(json.dumps(data,indent=2))#indent 缩进字符个数

结果中文字符 变成了Unicode字符 需要指定参数 ensure_ascii=False

示例:

import json

data = [{
"name" : "小米",
"gender" : "男",
"birrhday" : "1992-10-19"
}]
with open('data.json','w') as file:
file.write(json.dumps(data,indent=2,ensure_ascii=False))#indent 缩进字符个数

后面做数据分析时会经常用到 需熟练掌握

Python3编写网络爬虫09-数据存储方式二-JSON文件存储的更多相关文章

  1. python3编写网络爬虫13-Ajax数据爬取

    一.Ajax数据爬取 1. 简介:Ajax 全称Asynchronous JavaScript and XML 异步的Javascript和XML. 它不是一门编程语言,而是利用JavaScript在 ...

  2. Python3编写网络爬虫12-数据存储方式五-非关系型数据库存储

    非关系型数据库存储 NoSQL 全称 Not Only SQL 意为非SQL 泛指非关系型数据库.基于键值对 不需要经过SQL层解析 数据之间没有耦合性 性能非常高. 非关系型数据库可细分如下: 键值 ...

  3. Python3编写网络爬虫11-数据存储方式四-关系型数据库存储

    关系型数据库存储 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表保存的,所以它的存储方式就是行列组成的表.每一列是一个字段,每一行是一条记录.表可以看作某个实体的集合,而实体之间存在联系, ...

  4. Python3编写网络爬虫10-数据存储方式三-CSV文件存储

    3.CSV文件存储 CSV 全称 Comma-Separated Values 中文叫做逗号分隔值或者字符分隔值,文件以纯文本形式存储表格数据.文件是一个字符序列 可以由任意数目的记录组成相当于一个结 ...

  5. Python3编写网络爬虫08-数据存储方式一-文件存储

    数据存储 用解析器解析出数据之后,就是存储数据了.保存的形式可以多种多样,最简单的形式是直接保存为文本文件,如TXT JSON CSV等.另外还可以保存到数据库中,如关系型数据库MySQL 非关系型数 ...

  6. python3编写网络爬虫18-代理池的维护

    一.代理池的维护 上面我们利用代理可以解决目标网站封IP的问题 在网上有大量公开的免费代理 或者我们也可以购买付费的代理IP但是无论是免费的还是付费的,都不能保证都是可用的 因为可能此IP被其他人使用 ...

  7. python3编写网络爬虫21-scrapy框架的使用

    一.scrapy框架的使用 前面我们讲了pyspider 它可以快速的完成爬虫的编写 不过pyspider也有一些缺点 例如可配置化不高 异常处理能力有限对于一些反爬虫程度非常强的网站 爬取显得力不从 ...

  8. python3编写网络爬虫20-pyspider框架的使用

    二.pyspider框架的使用 简介 pyspider是由国人binux 编写的强大的网络爬虫系统 github地址 : https://github.com/binux/pyspider 官方文档 ...

  9. python3编写网络爬虫19-app爬取

    一.app爬取 前面都是介绍爬取Web网页的内容,随着移动互联网的发展,越来越多的企业并没有提供Web页面端的服务,而是直接开发了App,更多信息都是通过App展示的 App爬取相比Web端更加容易 ...

随机推荐

  1. ThreadLocalMap里Entry为何声明为WeakReference?

    Java里,每个线程都有自己的ThreadLocalMap,里边存着自己私有的对象.Map的Entry里,key为ThreadLocal对象,value即为私有对象T.在spring MVC中,常用T ...

  2. #13 让代码变得Pythonic

    前言 在学习Python的过程中,肯定听说过这么一个词:Pythonic,它的意思是让你的代码很Python! 一.列表生成式 前面有一节专门讲解了Python的列表,其灵活的使用方法一定让你陶醉其中 ...

  3. Docker入门之一Docker在Window下安装

    最近这几年,各个大公司都在打造自己的云平台,什么阿里云,华为云,腾讯云等等云,以及各种的微服务架构,其实在这当中Docker容器技术算是一个很重要的角色. 一.下载 在下载之前首先检查一下自己的电脑是 ...

  4. 部署DTCMS到Jexus遇到的问题及解决思路---部署

    上一篇我们环境已经准备完成,此时可以部署了,我们就以dtcms作为例子,http://bbs.dtcms.net/forum.php?mod=viewthread&tid=2420&e ...

  5. [PHP] 算法-合并两个有序链表为一个有序链表的PHP实现

    合并两个有序的链表为一个有序的链表: 类似归并排序中合并两个数组的部分 1.遍历链表1和链表2,比较链表1和2中的元素大小 2.如果链表1结点大于链表2的结点,该结点放入第三方链表 3.链表1往下走一 ...

  6. [android] 手机卫士自定义滚动控件

    TextView控件设置单行显示 android:singleLine=”true” 设置TextView开始的位置显示省略号,android:ellipsize=”start” 设置滚动属性,and ...

  7. MyBatis学习笔记(一) 概述

    一.什么是MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBat ...

  8. java_分数

    题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这个类要 ...

  9. 基于python的websocket开发,tomcat日志web页面实时打印监控案例

    web socket 接收器:webSocket.py 相关依赖 # pip install bottle gevent gevent-websocket argparse from bottle i ...

  10. IIS7下,显示PHP错误(不显示500错误,而显示详细错误)

    玛德,IIS就是个坑,害得老子进行摸索了那么久,才找到了解决方法: 1.除了将php.ini配置为: display_errors = on; error_reporting = E_ALL & ...