Json简介:

Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式。Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。现在也常用于http请求中,所以对json的各种学习,是自然而然的事情。 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等(encoding过程)。 反序列化:就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象(decoding过程)。

安装

安装python2.6以上版本的童鞋,可以不需要下载json包,直接在所需的地方就import json 即可使用,在安装目录下的Lib 下,看到这两个包(点进去仔细阅读这些源码,会有更多的收获
C:\Python36\Lib\json
C:\Python36\Lib\multiprocessing

json的4个功能:

1.dumps功能 :将数据通过特殊的形式转换为所有程序语言都认识的字符串; 2.dump功能:将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件 3.loads功能 : 将json编码的字符串再转换为python的数据结构 4.load功能:从数据文件中读取数据,并将json编码的字符串转换为python的数据结构

说明:

 json编码支持的基本类型有:None, bool, int, float, string, list, tuple, dict.   对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。   json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],因为其他语言没有元组的概念,只有数组,也就是列表。

举例1 python数据结构转json结构

import json
str = [{"username":"七夜","age":24},(2,3),1]
json_str = json.dumps(str,ensure_ascii = False)
print(json_str) #[{"username": "七夜", "age": 24}, [2, 3], 1]
with open('qiye.txt','w') as fp:
json.dump(str,fp = fp,ensure_ascii = False)


new_str = json.loads(json_str)
with open('qiye.txt','r') as fp:
print(json.load(fp)) #[{'username': '七夜', 'age': 24}, [2, 3], 1]

举例2:下载盗墓笔记的部分目录

import json
from bs4 import BeautifulSoup
import requests

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers={'User-Agent':user_agent}

r = requests.get('http://seputu.com/',headers=headers)
soup = BeautifulSoup(r.text,'html.parser',from_encoding='utf-8')#html.parser

content=[]
for mulu in soup.find_all(class_="mulu"):

h2 = mulu.find('h2')
if h2!=None:
h2_title = h2.string#获取标题
list=[]
for a in mulu.find(class_='box').find_all('a'):#获取所有的a标签中url和章节内容
href = a.get('href')
box_title = a.get('title')
list.append({'href':href,'box_title':box_title})
content.append({'title':h2_title,'content':list})
#with open('qiye.txt','w') as fp:     #也可以保存为txt,默认是UTF-8
with open('qiye.json','w') as fp:
json.dump(content,fp=fp,indent=4)
with 语句 是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from future import with_statement 导入后才可以使用),从 2.6 版本开始缺省可用(参考 What's new in Python 2.6? 中 with 语句相关部分介绍)。with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。 术语 要使用 with 语句,首先要明白上下文管理器这一概念。有了上下文管理器,with 语句才能工作。 下面是一组与上下文管理器和with 语句有关的概念。 上下文管理协议(Context Management Protocol):包含方法 enter() 和 exit(),支持 该协议的对象要实现这两个方法。 上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了 enter() 和 exit() 方法。上下文管理器定义执行 with 语句时要建立的运行时上下文, 负责执行 with 语句块上下文中的进入与退出操作。通常使用 with 语句调用上下文管理器, 也可以通过直接调用其方法来使用。 运行时上下文(runtime context):由上下文管理器创建,通过上下文管理器的 enter() 和 exit() 方法实现,enter() 方法在语句体执行之前进入运行时上下文,exit() 在 语句体执行完后从运行时上下文退出。with 语句支持运行时上下文这一概念。 上下文表达式(Context Expression):with 语句中跟在关键字 with 之后的表达式,该表达式 要返回一个上下文管理器对象。 语句体(with-body):with 语句包裹起来的代码块,在执行语句体之前会调用上下文管 理器的 enter() 方法,执行完语句体之后会执行 exit() 方法。

其他

20180421 下载喜马拉雅音乐时,找到的json的表达

参考链接:

1.https://www.cnblogs.com/loleina/p/5623968.html 2.with语法: https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/