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
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 3 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐