程序猿必备知识-->>json格式 python版使用讲解
json的诞生
JSON的诞生原因是因为XML整合到HTML中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Douglas Crockford) 和 奇普·莫宁斯达(Chip Morningstar)一起从JS的数据类型中提取了一个子集,作为新的数据交换格式,因为主流的浏览器使用了通用的JavaScript引擎组件,所以在解析这种新数据格式时就不存在兼容性问题,于是他们将这种数据格式命名为 “JavaScript Object Notation”,缩写为 JSON,由此JSON便诞生了!
什么是json?
JSON(JavaScript Object Notation) 的缩写,它适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。json的格式与字典格式相似。
【json】在互联网几乎无处不在,它是一种最为基本且通用的数据格式。
大部分前后端数据都是【json】格式,只有少部分会用其他类型数据格式。
对于【json】格式的字符串,在python中我们可以使用【json】库将其解析。
JSON格式
-
我们知道JSON是从JavaScript的数据类型中提取出来的子集,那JSON有几种结构形式呢?又有哪些数据类型呢?他们又分别对应着JavaScript中的哪些数据类型呢?
-
JSON的2种结构形式,键值对形式和数组形式。
举了一个JSON的实例,就是键值对形式的,如下:
{"person": {"name": "pig","age": "18","sex": "man","hometown": {"province": "江西省","city": "抚州市","county": "崇仁县" } }}
-
这种结构的JSON数据规则是:一个无序的“‘名称/值’对”集合。一个对象以 {左括号 开始, }右括号 结束。每个“名称”后跟一个 :冒号 ;“‘名称/值’ 对”之间使用 ,逗号 分隔。
-
因为大多数的时候大家用的JSON可能都是上面那种key-value形式,所以很多人在讲解JSON的时候总是会忽略数组形式,这一点是需要注意的。
-
那JSON的数组形式是怎么样的呢?举一个实例吧!
["pig", 18, "man", "江西省抚州市崇仁县"]
数组形式的JSON数据就是值(value)的有序集合。一个数组以 [左中括号 开始, ]右中括号 结束。值之间使用 ,逗号 分隔。
JOSN的6种数据类型
上面两种JSON形式内部都是包含value的,那JSON的value到底有哪些类型,而且上期我们说JSON其实就是从Js数据格式中提取了一个子集,那具体有哪几种数据类型呢?
-
string:字符串,必须要用双引号引起来。
-
number:数值,与JavaScript的number一致,整数(不使用小数点或指数计数法)最多为 15 位,小数的最大位数是 17。
-
object:JavaScript的对象形式,{ key:value }表示方式,可嵌套。
-
array:数组,JavaScript的Array表示方式[ value ],可嵌套。
-
true/false:布尔类型,JavaScript的boolean类型。
-
null:空值,JavaScript的null。
使用
json.dumps 将 Python 对象编码成 JSON 字符串
import json
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
data2 = json.dumps(data)
print(data2)
[{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}]
json.loads 将已编码的 JSON 字符串解码为 Python 对象
import json
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = json.loads(jsonData)
print(text)
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
实例:
以豆瓣网为栗子
url = 'https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0&genres=%E7%A7%91%E5%B9%BB&countries=%E7%BE%8E%E5%9B%BD'
由于【requests】请求到的响应对象自带【json】解析方法。所以可以通过调用json()方法,自动将字符串解析成字典的数据类型。
import requests
url = 'https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0&genres=%E7%A7%91%E5%B9%BB&countries=%E7%BE%8E%E5%9B%BD'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 '
'Safari/535.1 '
}
response_movies = requests.get(url, headers=headers)
dict_movies = response_movies.json()
print(type(dict_movies))
<class 'dict'>
在网页控制台中分析筛选下数据
然后
import requests
url = 'https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0&genres=%E7%A7%91%E5%B9%BB&countries=%E7%BE%8E%E5%9B%BD'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 '
'Safari/535.1 '
}
response_movies = requests.get(url, headers=headers)
dict_movies = response_movies.json()
print(type(dict_movies))
for info_movie in dict_movies['data']:
print(info_movie['rate'], ' ->> ', info_movie['title'])
结果
<class 'dict'>
9.3 ->> 盗梦空间
8.7 ->> 头号玩家
9.3 ->> 楚门的世界
8.7 ->> 超能陆战队
9.3 ->> 星际穿越
9.3 ->> 机器人总动员
8.7 ->> 阿凡达
8.5 ->> 复仇者联盟4:终局之战
9.2 ->> 蝙蝠侠:黑暗骑士
8.1 ->> 复仇者联盟3:无限战争
7.5 ->> 复仇者联盟2:奥创纪元
8.2 ->> 复仇者联盟
7.0 ->> 美国队长
9.0 ->> 黑客帝国
7.2 ->> 毒液:致命守护者
8.1 ->> 银河护卫队
8.3 ->> 钢铁侠
8.0 ->> 美国队长2
7.7 ->> 蜘蛛侠:英雄远征
7.9 ->> 美国队长3
更多推荐
所有评论(0)