帝国cms怎么做网站,准备纸巾,桐乡网站开发,wordpress生成多个尺寸图片1 什么是 JSON#xff1f;
1.1 JSON 的定义
JSON 是 JavaScript Object Notation 的简写#xff0c;字面上的意思是 JavaScript 对象标记。本质上#xff0c;JSON 是轻量级的文本数据交换格式。轻量级#xff0c;是拿它与另一种数据交换格式XML进行比较#xff0c;相当轻…1 什么是 JSON
1.1 JSON 的定义
JSON 是 JavaScript Object Notation 的简写字面上的意思是 JavaScript 对象标记。本质上JSON 是轻量级的文本数据交换格式。轻量级是拿它与另一种数据交换格式XML进行比较相当轻量简洁。数据交换格式说明JSON是一种数据格式。字符串是JSON的一个表现形式符合JSON格式的字符串就是JSON字符串。JSON 独立于语言JSON 使用 Javascript语法来描述数据对象但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 JSON 可以和每一种语言下面特定的一种数据结构进行交换。如 JSON 数据对象可以转换成 Python 里的字典dict。
1.2 JSON 的优势
XML 在 JSON 出现之前是一个主流的数据交换格式大部分互联网上的服务它们之间交换数据的时候都采用XML的格式。但是自从轻量级的 JSON 出现了之后使用 XML 的越来越少了。
易于阅读XML稍显复杂看起来的时候比较费劲但是 JSON 数据就很容易一看就能知道它是什么意思。易于解析JSON 作为了一个数据交换格式存在一个组装和被解析的过程这也是强于 XML 的地方它更容易被解析出来。网络传输效率高由于JSON 比较轻量简洁所以对于同样一个信息JSON 的数据量更少一些在网络上传输的效率更高一些。跨语言交换数据JSON 独立于语言和平台非常简单和轻易地实现跨语言数据交换。
1.3 JSON 的数据结构
1.3.1 对象大括号 {} 保存的对象是一个无序的名称/值对集合。
{ name:Alice, age:18, hight:null } JSON 对象在大括号 {...} 中书写。对象可以包含多个 key/value键/值对。每个 key/value 对使用逗号 , 分割。key 和 value 中使用冒号 : 分割。key 必须是字符串在双引号中value 可以是合法的 JSON 数据类型字符串在双引号中, 数字整数或浮点数, 对象在大括号中, 数组在中括号中, 布尔值或 null。
1.3.2 数组中括号 [] 保存的数组是值value的有序集合。 JSON 数组在中括号中 [...] 书写。JSON 中数组值必须是合法的 JSON 数据类型字符串, 数字, 对象, 数组, 布尔值或 null。数组可包含多个对象。对象属性的值可以是一个数组。
{sites: [{ name:菜鸟教程 , url:www.runoob.com }, { name:google , url:www.google.com }, { name:微博 , url:www.weibo.com }]
}
JSON 对象中数组可以包含另外一个数组或者另外一个 JSON 对象
myObj {name:网站,num:3,sites: [{ name:Google, info:[ Android, Google 搜索, Google 翻译 ] },{ name:Runoob, info:[ 菜鸟教程, 菜鸟工具, 菜鸟微信 ] },{ name:Taobao, info:[ 淘宝, 网购 ] }]
}
2 Python的内置模块JSON
在Python中用我们已知的一些内置数据类型如列表、字典、元组、集合来操作数据结构会比直接操作JSON字符串要方便和简单的多。
JSON是可以跨语言和平台的与语言无关的。每一个JSON字符串都可以每个语言里面找到一个对应的数据结构。
在Python中提供了一个内置模块JSON这个模块有一系列的方法来帮助我们操作JSON数据。
2.1 反序列化
在编程里面有一个术语叫反序列化。用来定义由字符串到某一种语言下面的某一种数据结构的解析过程。
2.1.1 使用 json.loads() 把JSON对象字符串转换成 Python 字典
import jsonjson_str {name:Alice,age:18}student json.loads(json_str)print(type(student)) # 返回class dict说明json.loads()返回的是一个字典
print(student) # 返回{name: Alice, age: 18}
print(student[name]) # 返回Alice
print(student[age]) # 返回18
这个 JSON 字符串在 JavaScript 里面表示的是一个 JSON 对象但是在 Python 里面它变成了一个字典。
对于同样的这样的一个 JSON 字符串不同的语言有可能把 JSON 字符串会变成不同的数据类型怎么理解呢我们在 Python 里面确实是把这样的一个 JSON 字符串转换成了一个字典类型但是其他的一些语言有可能不是把它转成这样的一个字典类型有可能会把它转换成另外的数据结构比如哈希列表等等这个呢都是不一定的。
JSON 字符串对应到 JSON 数据结构里面它表示的是 JSON 的一个对象。但是它转换到Python 里面来的时候是用一个字典的方式来承载 JSON 对象所表示的信息。
在 JSON 数据格式里面啊它并不仅仅只有 JSON 对象object这一种数据类型。它还有数组array。
2.1.2 使用 json.loads() 把 JSON 数组字符串转换成 Python 列表
import jsonjson_str [{name:Alice,age:18},{name:John,age:20}]student json.loads(json_str)
print(type(student)) # 返回class list说明json.loads()返回的是一个列表
print(student) # 返回[{name: Alice, age: 18}, {name: John, age: 20}]
这个 JSON 字符串在 JavaScript 里面表示的是一个 JSON 数组但是在 Python 里面它变成了一个含有两个字典的列表。
为什么这个列表的内部元素是两个字典呢这是与 JSON 字符串相对应的JSON 字符串是一个数组对应 Python 的列表数组内部是两个 JSON对象所以对应 Python 的是两个字典。
2.1.3 布尔值的转换
import jsonjson_str [{name:Alice,flags:false},{name:John,flags:true}]student json.loads(json_str)
print(type(student)) # 返回class list说明json.loads()返回的是一个列表
print(student) # 返回[{name: Alice, flags: False}, {name: John, flags: True}]
上例中我们把 JSON 字符串中的数据 flags 的值改成一个布尔值。在 JSON 数据格式里面布尔值是小写的 false 或者 true 。注意布尔值不是字符串我们不需要加双引号。
我们注意一下在 Python 中解析出来的结果小写的 false 和 true 转换成了首字母大写的 False 和 True 。
2.1.4 本节小结
举了这么多事例呢无非是想告诉大家JSON 有自己的一些数据类型。而我们用 json.loads()函数最主要做的一件事情就是把 JSON 的数据类型转化成 Python 自己的数据类型。
JSON和Python之间的数据类型对比数据类型JSONPython字符串JSON中的字符串必须是双引号包围的。Python中的字符串可以使用单引号或双引号包围。数字JSON支持整数和浮点数Python中的数字类型更加丰富包括整数int、浮点数float、复数complex等布尔值JSON支持true和false两个布尔值。Python使用True和False表示布尔值注意大小写。数组/列表JSON使用数组array来表示一组有序的值。Python使用列表list来表示一组有序的元素。对象/字典JSON使用对象object来表示键值对的集合。Python使用字典dict来表示键值对的集合。null值JSON有一个null值表示空或不存在的值。Python使用None来表示空或不存在的值。其他数据Python还支持更多的数据类型如元组tuple、集合Set、日期时间等而JSON则没有这些数据类型。
上面的内容给大家演示了 JSON 的数据类型到 Python 数据类型的转换方法就是使用 json.loads()但是要强调的是上面所讲的重点并不是介绍如何使用 json.loads() 关键是想要告诉大家这样的一个 JSON 和 Python 之间的转换关系这一点比我们会使用 json.loads() 要重要的太多了。
2.2 序列化
序列化就是把 Python 的数据类型向 JSON 数据类型转换的一个过程。它同样是调用了 JSON 模块下面的一个函数 json.dumps() 。
2.2.1 使用 json.dumps() 把 Python 列表转换成 JSON 数组字符串
import json# 把Python列表转换成JSON字符串
python_list [{name:Alice,age:18,flags:False},{name:John,age:20}]json_string json.dumps(python_list)
print(type(python_list)) # class list,这里是python的一个列表
print(type(json_string)) # class str,这里是一个JSON字符串
print(json_string)
# 返回一个JSON数组
# [{name: Alice, age: 18, flags: false}, {name: John, age: 20}]
在这段代码中我们使用 Python 的 JSON 模块将 Python 列表python_list转换成了 JSON 格式的字符串json_string。这个过程主要涉及到 json.dumps() 函数该函数的作用是将Python 对象如列表、字典等序列化成 JSON 格式的字符串。
Python列表python_list是一个Python列表其中包含两个字典。每个字典都代表一个人的信息包括名字name、年龄age和标志flags。 json.dumps()函数json.dumps()函数用于将Python对象转换或称为“序列化”为JSON格式的字符串。这个函数非常有用当你需要将Python数据结构与JSON格式相互转换时。 python_list作为参数传递给json.dumps()。函数遍历python_list中的每个元素在这里是字典并将它们转换为JSON格式。在转换过程中字典的键和字符串值被直接转换而整数和布尔值也被相应地转换。转换后的JSON字符串被赋值给json_string变量。 类型检查python_list的类型是class list表示它是一个Python列表。而json_string的类型是class str表示它是一个字符串即JSON格式的字符串。 打印JSON字符串输出的结果是一个JSON数组其中包含两个对象对应于原始Python列表中的两个字典。
注意点
在JSON中所有的键和字符串值都必须用双引号包围而不是单引号。Python中的布尔值False在JSON中表示为false全部小写。Python中的整数和浮点数在转换为JSON时不会改变但Python中的字符串即使是数字形式的字符串在JSON中仍然被视为字符串。例如年龄18和20在JSON中仍然是字符串而不是数字。
通过这个过程我们可以方便地在 Python 和 JSON 之间转换数据这对于与Web服务交互或存储和读取数据非常有用。这就叫做序列化。
这里要跟大家强调一下并不是和 JSON 相关的这样一系列的转化才叫做序列化如果我们把 XML的字符串向 Python 的数据结构转换或者把 Python 的数据结构向 XML字符串转换它这个过程也称为序列化或者反序列化。
小提示怎样把一个对象存储到数据库里去呢
数据库是一个二维表它没有办法去表示一个对象的结构。所以一个方法就是把对象序列化成JSON 字符串或者 XML字符串。然后把字符串存到这个数据库里去。
当你要需要这个对象的时候可以把这个字符串从数据库里读出来然后再进行反序列化的过程。但是实际上这个是不可取的因为效率太低了。这个办法在操作数据库或者是其他类型的数据库还是比较适合去存储一些比较简单的数据结构。
而像对象这种东西应该把对象拆成一个二维表结构也就是说把对象分成一个个的属性把它存到这数据库里会比较合适。强烈反对把对象给序列化之后以字符串的形式存储到数据库里。
2.2.2 序列化的意义
上一节我们写了一个 JSON 字符串然后把它给反序列化成了 Python 字典。但是我们要考虑的是这个 JSON 字符串是从哪里来的呢
这不太可能是我们自己一个一个地写出来的。其实一般情况下这个 JSON 字符串还是我们通过序列化的过程来的。有可能是通过其他语言序列化之后通过一个服务的形式传给我们的。
下面举一个比较实际的例子比如
通过豆瓣的APIhttps://api.douban.com/v2/movie/top250服务获取一个JSON字符串。 {
msg:invalid_apikey, Please contact bd-teamdouban.com for authorized access.,
code:104,
request:GET \/v2\/movie\/top250
}
拿到 JSON 字符串就可以把它变成 Python 里面的数据结构从而获取到 JSON 字符串里面的相关数据信息
从这个事例可以看到为什么说 JSON 是一个数据交换的格式呢我们可以明显的看到这个数据是从豆瓣的服务这里以 JSON 数据格式的形式传送到我们自己的浏览器。既然是数据它就必然要有一个承载的格式。大多数情况都是选择用 JSON 数据格式来传递数据。
3 对 JSON 理解上的误区
JSON、JSON对象、JSON字符串这三者的区别如果在网上搜一搜说法各种各样、五花八门不能说它错但并不全面。
网上对于这三者的解释都没有跳出 JavaScript 这样的一个范围都是站在 JavaScript 这个特定语言的角度阐述这三者的区别。所以我们要跳出语言的范畴来看待这三个不同的名词。
3.1 JSON 并不是为 JavaScript 量身定制的
因为 JSON 的数据交换和 JavaScript 是没有什么区别的很多人很容易会认为 JavaScript 很特殊它和 JSON 是有一些特殊关系的。
其实没有那么造成这种误区的原因可能有两个方面
第一个方面是 JSON数据类型和JavaScript 的数据类型太过于相似。所以很多人一直搞不清楚 JSON 和 JavaScript 的关系。
JavaScript 和 JSON 之间的关系JavaScript这个语言它只是一个标准的实现方案之一这个标准就是EcmaScript。还有以前写flash程序的时候有个ActionScript。这个其实也是实现这个EcmaScript 标准的另外一种语言。我们可以把 JSON 也理解为是实现 EcmaScript 标准的一个的版本。
JSON 并不是JavaScript的一个附属品这一点呢大家一定要清楚。所以某种程度上来说JSON 可以看作是和 JavaScript 平齐的一种语言。因为 JSON 和JavaScript 都是对 EcmaScript 这个规范和标准的实现。
第二个方面是 JSON最开始的时候在外部前后端分离的过程中起到了重要的作用。而我们服务器的语言有很多很多种但是前端里边现在最主流的就是一个JavaScript。因为 JSON 被大量的应用于JavaScript的交互中所以会让很多人产生这样的一个误区。
3.2 JSON对象确实存在但它的定义非常片面
那么对应到三个名词上面JSON字符串、JSON我们不再说了。我们重点要说的是这个JSON对象。JSON对象确实存在但它的定义非常片面。
片面在什么地方呢如果把JSON对象放到JavaScript里面来说的话呢JSON对象这个说法是成立的但是问题是如果跳出了这个JavaScript的范畴比如说放到Phthon里面其实是没有JSON对象这个说法的啊。所以如果你在搜索引擎里面去搜索JSON字符串和JSON对象的区别绝大多数的答案都是以 JavaScript 这个语言为蓝本的。
3.3 JSON 我们应该把它理解成一个中间的语言格式
JSON 是一个比较独立的数据类型。它和 JavaScript 没有特定的关系。跳出语言层面如果我们要实现在两种不同的语言之间传递数据
第一种情况世界上只有两种语言我们可以直接按照一定的规则把A语言的数据类型转换成B语言的数据类型就可以了JSON没有存在的必要。
第二种情况显然第一种情况是不存在的目前已经有许多种语言要实现两两之间的转换就需要写若干种规则这显然也是不靠谱的这时就需要有一种中间类型的语言或者一种中间的数据类型的格式来作为一个标准所有的语言都向这个中间数据类型来转换这样就可以实现不同语言之间的快速转换。
所以很多时候我们应该把它理解成是一个中间的数据类型的转换格式。
文章转载自: http://www.morning.ylzdx.cn.gov.cn.ylzdx.cn http://www.morning.rxpp.cn.gov.cn.rxpp.cn http://www.morning.rnqbn.cn.gov.cn.rnqbn.cn http://www.morning.kstgt.cn.gov.cn.kstgt.cn http://www.morning.ljglc.cn.gov.cn.ljglc.cn http://www.morning.psdsk.cn.gov.cn.psdsk.cn http://www.morning.rwyw.cn.gov.cn.rwyw.cn http://www.morning.ndxrm.cn.gov.cn.ndxrm.cn http://www.morning.wnhml.cn.gov.cn.wnhml.cn http://www.morning.drkk.cn.gov.cn.drkk.cn http://www.morning.qxxj.cn.gov.cn.qxxj.cn http://www.morning.bchfp.cn.gov.cn.bchfp.cn http://www.morning.qggxt.cn.gov.cn.qggxt.cn http://www.morning.xxgfl.cn.gov.cn.xxgfl.cn http://www.morning.tdzxy.cn.gov.cn.tdzxy.cn http://www.morning.qcztm.cn.gov.cn.qcztm.cn http://www.morning.lzqtn.cn.gov.cn.lzqtn.cn http://www.morning.txlnd.cn.gov.cn.txlnd.cn http://www.morning.fkflc.cn.gov.cn.fkflc.cn http://www.morning.rldph.cn.gov.cn.rldph.cn http://www.morning.hhqjf.cn.gov.cn.hhqjf.cn http://www.morning.807yy.cn.gov.cn.807yy.cn http://www.morning.gydth.cn.gov.cn.gydth.cn http://www.morning.qnzgr.cn.gov.cn.qnzgr.cn http://www.morning.jyjqh.cn.gov.cn.jyjqh.cn http://www.morning.sfswj.cn.gov.cn.sfswj.cn http://www.morning.kclkb.cn.gov.cn.kclkb.cn http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn http://www.morning.krhkn.cn.gov.cn.krhkn.cn http://www.morning.rkwlg.cn.gov.cn.rkwlg.cn http://www.morning.knnc.cn.gov.cn.knnc.cn http://www.morning.fkyrk.cn.gov.cn.fkyrk.cn http://www.morning.zyndj.cn.gov.cn.zyndj.cn http://www.morning.qrsm.cn.gov.cn.qrsm.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.mnslh.cn.gov.cn.mnslh.cn http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn http://www.morning.tralution.cn.gov.cn.tralution.cn http://www.morning.qmbgb.cn.gov.cn.qmbgb.cn http://www.morning.lpsjs.com.gov.cn.lpsjs.com http://www.morning.pzpj.cn.gov.cn.pzpj.cn http://www.morning.hqbnx.cn.gov.cn.hqbnx.cn http://www.morning.rbjp.cn.gov.cn.rbjp.cn http://www.morning.rnyhx.cn.gov.cn.rnyhx.cn http://www.morning.nyqzz.cn.gov.cn.nyqzz.cn http://www.morning.kpbq.cn.gov.cn.kpbq.cn http://www.morning.mfmrg.cn.gov.cn.mfmrg.cn http://www.morning.pqryw.cn.gov.cn.pqryw.cn http://www.morning.rtkgc.cn.gov.cn.rtkgc.cn http://www.morning.pxspq.cn.gov.cn.pxspq.cn http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn http://www.morning.bqmhm.cn.gov.cn.bqmhm.cn http://www.morning.nzxdz.cn.gov.cn.nzxdz.cn http://www.morning.bpmdz.cn.gov.cn.bpmdz.cn http://www.morning.bysey.com.gov.cn.bysey.com http://www.morning.rdxp.cn.gov.cn.rdxp.cn http://www.morning.qwyms.cn.gov.cn.qwyms.cn http://www.morning.llyqm.cn.gov.cn.llyqm.cn http://www.morning.llfwg.cn.gov.cn.llfwg.cn http://www.morning.pzjfz.cn.gov.cn.pzjfz.cn http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.gthc.cn.gov.cn.gthc.cn http://www.morning.rnht.cn.gov.cn.rnht.cn http://www.morning.bgbnc.cn.gov.cn.bgbnc.cn http://www.morning.hxcrd.cn.gov.cn.hxcrd.cn http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn http://www.morning.jxgyg.cn.gov.cn.jxgyg.cn http://www.morning.nrrzw.cn.gov.cn.nrrzw.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.yxbrn.cn.gov.cn.yxbrn.cn http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.wmnpm.cn.gov.cn.wmnpm.cn http://www.morning.kaakyy.com.gov.cn.kaakyy.com http://www.morning.tdttz.cn.gov.cn.tdttz.cn http://www.morning.lynmt.cn.gov.cn.lynmt.cn http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn http://www.morning.zdydj.cn.gov.cn.zdydj.cn http://www.morning.tnbsh.cn.gov.cn.tnbsh.cn http://www.morning.kdbcx.cn.gov.cn.kdbcx.cn