json.docx
- 文档编号:2412679
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:18
- 大小:26.96KB
json.docx
《json.docx》由会员分享,可在线阅读,更多相关《json.docx(18页珍藏版)》请在冰豆网上搜索。
json
JSON
百科名片
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。
它基于JavaScript(StandardECMA-2623rdEdition-December1999)的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。
这些特性使JSON成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成。
目录
基础结构
基础示例
格式应用
具体形式
概念比较
基础结构
JSON建构于两种结构:
1.“名称/值”对的集合(Acollectionofname/valuepairs)。
不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hashtable),有键列表(keyedlist),或者关联数组(associativearray)。
2.值的有序列表(Anorderedlistofvalues)。
在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。
事实上大部分现代计算机语言都以某种形式支持它们。
这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
基础示例
简单地说[1],JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。
这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且JSON可以表示比名称/值对更复杂的结构。
例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
JSON表示名称/值对的方式
按照最简单的形式,可以用下面这样的JSON表示名称/值对:
{"firstName":
"Brett"}
这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间:
firstName=Brett
但是,当将多个名称/值对串在一起时,JSON就会体现出它的价值了。
首先,可以创建包含多个名称/值对的记录,比如:
{"firstName":
"Brett","lastName":
"McLaughlin","email":
"aaaa"}
从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下JSON更容易使用,而且可读性更好。
例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。
表示数组
当需要表示一组值时,JSON不但能够提高可读性,而且可以减少复杂性。
例如,假设您希望表示一个人名列表。
在XML中,需要许多开始标记和结束标记;如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式,或者将键名称修改为person1-firstName这样的形式。
如果使用JSON,就只需将多个带花括号的记录分组在一起:
{"people":
[
{"firstName":
"Brett","lastName":
"McLaughlin","email":
"aaaa"},
{"firstName":
"Jason","lastName":
"Hunter","email":
"bbbb"},
{"firstName":
"Elliotte","lastName":
"Harold","email":
"cccc"}
]}
这不难理解。
在这个示例中,只有一个名为people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。
上面的示例演示如何用括号将记录组合成一个值。
当然,可以使用相同的语法表示多个值(每个值包含多个记录):
{"programmers":
[
{"firstName":
"Brett","lastName":
"McLaughlin","email":
"aaaa"},
{"firstName":
"Jason","lastName":
"Hunter","email":
"bbbb"},
{"firstName":
"Elliotte","lastName":
"Harold","email":
"cccc"}
],
"authors":
[
{"firstName":
"Isaac","lastName":
"Asimov","genre":
"sciencefiction"},
{"firstName":
"Tad","lastName":
"Williams","genre":
"fantasy"},
{"firstName":
"Frank","lastName":
"Peretti","genre":
"christianfiction"}
],
"musicians":
[
{"firstName":
"Eric","lastName":
"Clapton","instrument":
"guitar"},
{"firstName":
"Sergei","lastName":
"Rachmaninoff","instrument":
"piano"}
]}
这里最值得注意的是,能够表示多个值,每个值进而包含多个值。
但是还应该注意,在不同的主条目(programmers、authors和musicians)之间,记录中实际的名称/值对可以不一样。
JSON是完全动态的,允许在JSON结构的中间改变表示数据的方式。
在处理JSON格式的数据时,没有需要遵守的预定义的约束。
所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。
格式应用
掌握了JSON格式之后,在JavaScript中使用它就很简单了。
JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。
将JSON数据赋值给变量
例如,可以创建一个新的JavaScript变量,然后将JSON格式的数据字符串直接赋值给它:
varpeople={"programmers":
[{"firstName":
"Brett","lastName":
"McLaughlin","email":
"aaaa"},
{"firstName":
"Jason","lastName":
"Hunter","email":
"bbbb"},
{"firstName":
"Elliotte","lastName":
"Harold","email":
"cccc"}
],
"authors":
[
{"firstName":
"Isaac","lastName":
"Asimov","genre":
"sciencefiction"},
{"firstName":
"Tad","lastName":
"Williams","genre":
"fantasy"},
{"firstName":
"Frank","lastName":
"Peretti","genre":
"christianfiction"}
],
"musicians":
[
{"firstName":
"Eric","lastName":
"Clapton","instrument":
"guitar"},
{"firstName":
"Sergei","lastName":
"Rachmaninoff","instrument":
"piano"}
]}
这非常简单;现在people包含前面看到的JSON格式的数据。
但是,这还不够,因为访问数据的方式似乎还不明显。
访问数据
尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进JavaScript变量之后,就可以很轻松地访问它。
实际上,只需用点号表示法来表示数组元素。
所以,要想访问programmers列表的第一个条目的姓氏,只需在JavaScript中使用下面这样的代码:
people.programmers[0].lastName;
注意,数组索引是从零开始的。
所以,这行代码首先访问people变量中的数据;然后移动到称为programmers的条目,再移动到第一个记录([0]);最后,访问lastName键的值。
结果是字符串值“McLaughlin”。
下面是使用同一变量的几个示例。
people.authors[1].genre//Valueis"fantasy"
people.musicians[3].lastName//Undefined.Thisreferstothefourthentry,andthereisn'tone
people.programmers.[2].firstName//Valueis"Elliotte"
利用这样的语法,可以处理任何JSON格式的数据,而不需要使用任何额外的JavaScript工具包或API。
修改JSON数据
正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据:
people.musicians[1].lastName="Rachmaninov";
在将字符串转换为JavaScript对象之后,就可以像这样修改变量中的数据。
转换回字符串
当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。
在JavaScript中这种转换也很简单:
StringnewJSONtext=people.toJSONString();
这样就行了!
现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作Ajax应用程序中的请求字符串。
更重要的是,可以将任何JavaScript对象转换为JSON文本。
并非只能处理原来用JSON字符串赋值的变量。
为了对名为myObject的对象进行转换,只需执行相同形式的命令:
StringmyObjectInJSON=myObject.toJSONString();
这就是JSON与本系列讨论的其他数据格式之间最大的差异。
如果使用JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。
对于其他数据格式,需要在原始数据和格式化数据之间进行转换。
即使使用DocumentObjectModel这样的API(提供了将自己的数据结构转换为文本的函数),也需要学习这个API并使用API的对象,而不是使用原生的JavaScript对象和语法。
最终结论是,如果要处理大量JavaScript对象,那么JSON几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- json