订阅博客
收藏博客
微博分享
QQ空间分享

山楂,python小讲堂25 - 你真的了解JSON嘛?,古代言情小说

频道:平安彩票app 标签:护手钩瘦老头 时间:2020年02月14日 浏览:149次 评论:0条

前语

宽恕我标题党了一波,哈哈哈哈!其实今日这篇文章算是题外番了,为什么这么说呢?由于JSON这个词,在当今的web环境下,作为一种最常运用的数据格局来进行遍地的交互,本想着不计划介绍JSON的,可是由于后续的爬虫章节肯定会涉及到这个常识点,早就说过学拼音,此系列文章是为了让小白也能入门……所以仍是独自提出来写一篇文章来讲解下。

JSON的概念

JSON,全拼JavaScript Object Notation, 中文是JavaScript 目标表明法的意思,它是一种轻量级的数据交换格局。来!划要点……轻量级的!数据交换格山楂,python小讲堂25 - 你真的了解JSON嘛?,古代言情小说式!概念上来说,这两点是最重要的,也是最应该记住的。

PS: JavaScript是前端的一种脚本言语,比方咱们浏览器的一些按钮交互动作,都是由JS来完成的。

JSON与XML的比较

再遍及一个新的名词常识点XML,前期传递数据,是用XML来进行传递的。比及后来JSON出来今后,越来越多的人开始运用JSON在网络进步行数据的传火蓝刀锋2递了,当然是由于JSON比XML有更多的长处,才会被人们承受哇!⊙∀⊙!来看下面的两孕吐个观念:

什么是 XML? XML 指可扩展符号言语(EXte恩师颂nsible Markup Language巴戟天的成效与效果) XML 是一种符号言语,很相似 HTML XML 的规划主旨是传输数据,而非显现数据

什么是JSON? JSON 是轻量级的文本数据交换格局 JSON 独立于言语 * JSON 具有自我描绘性,更易了解

说了这么多,别离来看下二者长什么姿态吧!以下截图来历介来于网址:

http://www.w3school.com.cn,有爱好的能够去看下官方的叙述。

图1,XML:

学过HTML的同学看上去是不是十分了解,XML也是选用闭合歌曲我和我的祖国标签的方式来符号数据。

图2,JSON:

而JSON呢?实则便是一串字符串,是不是看起来十分像Python的数据类型dict,也便是字典呢!

Python中JSON的用法

了解到上述一切概念后就好说多了,JSON在每种言语中都有着不同的数据类型彼此对应,比方在Python中,当我元亨利贞八字排盘们把一个一般的JSON字符串解析完成后,得到的便是dict类型。口莱昂纳德说无凭,来直接看下面的示例吧!

示例1:场景来咯,假定你的女朋友!被我用JSON字符串来描绘她的特征了,那么现在需求将此JSON串,在python中将她的体重读取到,改怎么做呢?

首要import一个叫做json的内置库,python一贯秉承着简练,经过姓名就知道这个库是做什么的啦!而json有个办法,能够将JSON数据格局直接转化为python内置的数据类型,调用loads办法来进行转化。下面就来看下详细代码:

import json
girlfriend_json1 = "{name : 女儿国公主 , age : 10000, weight : 200kg}"
girlfr提线木偶iend_json2 = "{'name' : '女儿国公主' , 'age' : 10000, 'weight' : '200kg'}"
girlfrien言情小说大全d_json3 = '{"name" : "女儿国公主" , "age" : 10000, "weight" : "200kg"}'
girlfriend_dict = json.loads(girlfriend_json1)
girlfriend_dict = json.loads(girlfriend_json2)
girlfriend_dict = json.loads(girlfriend_json3)
print(type(girlfriend_dict))
print(girlfriend_dict)

能够看到代码中,在设定JSON字符串时,以女朋友的特性来作为JSON字符串的“key”,对应的值来作为JSON字符串的"value"。那么问题来了,你以为girlfriend_json1 ~ 3 哪个才是正确的写法呢?(先不要看下面的解说哟,独立考虑下!)

解说:

① girlfriend_json1 ,大体格局是没有错的,正如python中的dict相同,JSON字符串也是有相似key-value这种方式组成的数据格局。可是,假定假如咱们解析正常了,此刻的name肯定是一个没有经过界说的变量,这荜茇怎样读样的存在在程序中是不被答应的,所以肯定会报错!如下:

② 山楂,python小讲堂25 - 你真的了解JSON嘛?,古代言情小说girlfriend_json2 ,有了1的解说,那么咱们能够得出一个定论,JSON中未界说的变量是不能直接命名的,所以必须用引号来润饰,也便是说要定Ezgirl义成字符串的方式来写,所以呢有了2的写法,持续来运转下看看能否成功呢?

这是为什么呢?现已用单引号括起来了,仍是报错,实际上虽然在python中界说字尤克里里调音符串是能够用单双山西高兴十分引号来润饰,可是请必须记住,JSON自身规则如此,在JSON自身中必须由双引号去界说才算是特点字符串。所以呢,所以呢,持续看下面的3吧!

③ girlfriend_json3 ,此种写法在1,2上层层优化,得出的双引号界说特点,而关于数字来说,是不需求被双引号括起来进行润饰的,这点能够留意下,如下图:

经过不断地调整,由于JSOadbN自身需求用双引号来界说所谓的变量,所以在python中定一个JSON字符串,最外层就要用单引号来润饰,经过loads转化成功后,能够看到转成的数据类型是python中的dict类型!这儿就十分简单能够将女票的体重读取出出来了!只需求运用**dict['key']**操作即可。

示例2:场景再次改变,假定仍是你的女朋友!一个上一任,一个现任,需求作比照!依然是用JSON字符串来描绘她们的特征,终究仍是要在python中将她们的体重读取到,改怎么做呢?而这个JSON字符串该怎么界说呢?(考虑考虑....)

import json
girlfrie山楂,python小讲堂25 - 你真的了解JSON嘛?,古代言情小说nd_json =体操少女 '[{"name" : "上一任女儿国公主" , "age" : 10000, "weight" : "200kg"},' \
'{"name" : "现任嫦娥小姐姐" , "age" : 18, "weight" : "50kg"}]'
girlfriend_list = json.loads(girlfriend_json)
print(type(girlfriend_list)进贡娘娘)
print(girlfriend_list)
print(f"上一任的体重:{girlfriend_list[0]['weight']}")
print(f"现任的体重:{girlfriend_list[1]['weight']}")

在界说上一任后,经过\ 对字符串的界说进行了换行操作,要不实在是太长了!能够看到,经过[]将两个JSON组合到了一同,可是依然是字符串方式,运转下代码,输出看下成果:

能够看到,经过相似python中list的去界说JSON,在解析后,得到的python根底数据类型便是list,而不是在示例一种解析得到的dict类型!

这也是为什么我又再次举例了示例2的原因,JSON自身是有着所谓不同的“数据根底类型”,而每一种都能够对应到山楂,python小讲堂25 - 你真的了解JSON嘛?,古代言情小说不同言语中去!(包含你能够进行布尔值的测验)这就要涉及到另一个常识点了,序列化与反序列化。

JSONPythonJavaobject(JSON整串)dictMaparraylistListstr上海滩之阎王ingstrStringnumberintintnumberfloatfloattrueTruetruefalseFalsefalsenullNonenull

python的序列化与反序列化

序列化

先来看下序列化是什么意思?实例如下:

示例:场景再次来临,假定你的女朋友!上一任和现任(捂脸逃,跟女朋友杠上了!汪汪汪……).....这次不界说在JSON上了,咱们将其界说在python的根底数据类型list中....

import json
girlfriend_list = [{'name': '女儿国公主', 'age': 10000, 'weight': '200kg'},
{'name': '嫦娥小姐姐', 'age': 18, 'weight': '50kg'}
]
# ensure_ascii = False,此参数加上,中文才不会被转为unicode编码
girlfriend_json = json.dumps(girlfriend_list,ensure_ascii=False)
girlfriend_json2 = json.dumps(girlfriend_list)
print(girlfriend_json)
print(girlfriend_json2)
print(type(girlfriend_json))

代码中,经过json.dumps办法,将界说好的python根底类型list转为本章男猪脚JSON方式,打印输出你能够看到,它其实便是一段字符串。

需求留意的是:假如你的内容里包含了中文字符,在dumps办法里传入第二个参数,将ascii码选项设置为False即可成功显现原有中文,不然默以为True,中文会被转为unicode进行输出。此处所说能够点击上图查看到成果的输出事例。

以上说了这么多,实际上咱们将程序内存中的根底数据类型转为JS合集ON山楂,python小讲堂25 - 你真的了解JSON嘛?,古代言情小说的这一进程,就称之为序列化。

序列化的意图:序列化之后,就能够把序列化后的内容写入磁盘,或许经过网络传输到其他机器上,也便是所谓的数据落地(落地,写入数据库中或许电脑磁盘上)与数据调用传输。

反序列化

反序列化便是将序列化的进程反过来,实际上并不难以了解,在上面咱们将JSON转化为Python内置数据根底类型的这个进程,其实便是称之为反序列化。当然这儿不限制与JSON转为Python的内置数据类型,相似的,比方XML转为Python数据类型的进程也能够称之为反序列化。从硬件的思想视点解说来说,便是将硬盘、网络上的数据转化为言语自身内存的数据根底类型来供程序运用。

关于JSON额定的一些论题

在网络体系的交互中,像这种数据格局进行交互来说是必不可少的,比方咱们山楂,python小讲堂25 - 你真的了解JSON嘛?,古代言情小说日常日子中经常会用浏览器拜访网页,拿淘宝举例,它上面的物品价格数字有或许每天都会发生变化,而这些数据便是经过后端体系运用JSON这种数据格局将数据传到页面上,终究由浏览器动态烘托而成,你才干看到每种产品都有不同的价钱。

在不同的言语体系中,JSON也能够作为跨言语的一致数据格局来规则其他言语,然后完成跨言语的体系交互。数据格局呢,相似于中心署理,你要是想跨言语体系进行交互,那你就得遵从我界说的标准(这儿的标准便是指JSON数据格局)。

如下图:

好了,以上便是本章介绍的番外篇JSON山楂,python小讲堂25 - 你真的了解JSON嘛?,古代言情小说啦.

至此完!

有想交流交流python相关常识的同学,欢迎重视公号: migezatan.(咪哥杂谈)