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. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十二):链路追踪(Sleuth、Zipkin)

    在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个 ...

  2. win32之进程概念

    win32之进程 一丶简介 学习WindowsAPI. 之前.我们必须理解什么是进程. 在windows环境下.进程就是一个运行起来的exe程序 进程提供了数据以及资源. 但是怎么使用不管.而是由线程 ...

  3. PHP 正则表达式资料

    正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 举例来说,正则表达式的一个 ...

  4. SpringMVC入门学习(二)

    SpringMVC入门学习(二) ssm框架 springMVC  在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...

  5. 光流法详解之二(HS光流)

    Horn–Schunck光流算法[1]是一种全局方法估算光流场. 参考博文:https://blog.csdn.net/hhyh612/article/details/79216021 假设条件: H ...

  6. 身份认证与加密浅谈(PKI)

    利用PKI体系解决私密文件传输中一系列问题的大体思路 背景:现有A用户和B用户之间想加密传输一些秘密文件,通过什么样的技术可以确保A和B传输数据的安全性?方案:采用对称秘钥对数据进行加密传输(对称加密 ...

  7. USB 驱动(监测鼠标左键的动作)

    (基于 Linux 3.4.2 内核) 可分为以下几个步骤来完成这个驱动: 1. 分配设置一个 usb_driver 结构体 2. 注册这个 usb_driver (如果设备的 id_table 与驱 ...

  8. 如何对付运行时可能为 null 的 Record Type

    在 F# 中,Record Type 是无法表达 null 语义的,例如,一个 Record 变量不能够使用 null 字面量赋值,接收 nullable(这里并不是指 BCL 中的 Nullable ...

  9. Java学习笔记之——静态方法

    1.方法的定义 定义在类中,方法是独立的 2.语法: public static 返回值类型 方法名(形参列表){ 方法中的具体代码: } 1)方法名:在同一个类中方法名不能重复    命名规则:驼峰 ...

  10. C code example for strdup

    #include <stdlib.h> #include <stdio.h> #include <string.h> #include <malloc.h&g ...