理解JSON:3分钟课程


Posted in Javascript onOctober 28, 2011
  1. 两个月前你从没听说过JSON
  2. 一个月前你听说了这个词但没有留意
  3. 一周前你发现这个词被提到多次,开始想,没错 … 又有一些垃圾东西要学了
  4. 今天你被心灵深处的一个闹铃闹醒,心想:这该死的json究竟是个什么东西?为什么突然间到处都是它了!

于是晚上我乘坐了一辆慢腾腾的公交回到家(周五通常都是很慢),然后给自己找了一大堆关于JSON资料。所以我可以文雅的带你进入JSON的大门。

这就开始了 …

这几个字母是什么意思?

JavaScript Object Notation.

[一个滑稽的名字。它应该被称作Lightweight Ecmascript Object Notation, 或简称 'LEON'。 理解JSON:3分钟课程 ]

它是个什么东西?

JSON是一种传递对象的语法,对象可以是name/value对,数组和其他对象。

下面是一小段JSON代码:

{"skillz": {
	"web":[
		{"name": "html",
		 "years": "5"
		},
		{"name": "css",
		 "years": "3"
		}],
	"database":[
		{"name": "sql",
		 "years": "7"
		}]
}}

你看懂了吧?那么当你再看到它时就知道它是JSON了。主要部分:

花括弧,方括弧,冒号和逗号

  1. 花括弧表示一个“容器”
  2. 方括号装载数组
  3. 名称和值用冒号隔开
  4. 数组元素通过逗号隔开

把它想成“得了厌食症的XML”

(如果你跟我一样老,可以把它想成有层次关系的'.INI'文件)

(如果你是个自以为是的Lisp小丑,可以把它想成”S-expressions”,自以为是吧)

JSON很像XML,因为:

  1. 他们都“自我描述”,这意味着值都是可列举的,是“人类可读”的
  2. 都是有层级的。(例如你可以在值里再存放值)
  3. 都能被多种的编程语言解析和使用
  4. 都能使用AJAX方法来传递(例如httpWebRequest)

JSON跟XML不一样,因为:

  1. XML里在元素的开始和结尾处有尖括号和标签名:JSON使用花括号,而且只在数据的开始和结束时使用。
  2. JSON更简练,毫无疑问更适合人类书写,也许也能让我们更快速的阅读。
  3. JSON可以在JavaScript里简单的传递到eval()方法里使用
  4. JSON里有数组{每个元素没有自己的名称}
  5. 在XML里你可以对一个元素使用任意想要的名称,在JSON里你不能使用Javascript里的保留字

可是为什么?它有什么好的?

当你写ajax之类的东西时,如果你使用JSON,你就勉去了手工拼写XML。更迅速。

同样,当你写ajax之类的东西时,怎样最简单?XML方式还是JSON方式:

XML方式:

  1. 取回一个XML文件
  2. 循环它,从中提取值
  3. 处理这些值,等

对比

JSON方式:

  1. 取回JSON字符串。
  2. ‘eval' JSON数据

它是面向对象的吗?

No,严格的说,不是。

就像是VB6里的面向对象一样。它提供了很好的封装机制,你可以使用它把数据和方法分离出来,但它不提供任何的继承,多型,接口,或其它类似的面向对象的东西

很显然,它是使javascript变得更易于维护,分析和复用的方向上前进了一步。

Thomas Frank写了一个灵巧的javascript库,叫做classyJSON,它在JSON代码上增加了继承和定义范围等特征。

它只是用在客户端吗?

是,也不是。在服务器端你可以容易的把对象序列化成JSON或反之。对于.net,程序员可以使用类似Json.net的类库使这些操作自动化(我估计是使用反射机制),或你使用自己的程序来做这些事,可能会更快些。

3分钟将近结束….

就我所知,JSON是由一个叫做Douglas Crockford的家伙发明的。如果你喜欢的话,可以看一下他的网站,他非常的有趣。

现在去读一下懂JSON的人写的东西

(从Delicious using JSON上搜刮来的!)

  • DOM Query Speed Test
  • 24 ways: Don't be eval()
  • Understanding JSON: the 3 minute lesson
  • Serializing Objects as JavaScript using Atlas, JSON.NET and AjaxPro
  • JSON ? Wikipedia, the free encyclopedia
  • Introduction to JSON
  • XML.com: JSON and the Dynamic Script Tag: Easy, XML-less Web Services for JavaScript
  • Classy JSON
  • ajax json tutoral
  • XML to JSON ? a converter

这就是全部。

我在几分钟的时间里只能整理出这些东西——所有我说的有些东西可能完全是错的。如果是这样,请留言告诉我,告诉我我有多傻。我会很高兴的纠正任何一个错误。祝你好运!

(边注:如果你把 { 和 } 替换成”<” 和 “/>”,把”:” 换成 “/”… 你会得到一个非常像gaXml的东西。有趣的世界。

(边注2:Jason 和 Ajax 都是希腊神话中的英雄。预告:另外一些即将出现的技术垃圾包括:Heracles, Perseus, Deucalion, Theseus
and Bellerophon。)

Javascript 相关文章推荐
csdn 论坛技术区平均给分功能
Nov 07 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
Jun 01 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
Nov 09 Javascript
JS图片预加载 JS实现图片预加载应用
Dec 03 Javascript
如何解决Jquery库及其他库之间的$命名冲突
Sep 15 Javascript
jfinal与bootstrap的登录跳转实战演习
Sep 22 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
Jul 01 Javascript
javascript 删除数组元素和清空数组的简单方法
Feb 24 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
Mar 08 Javascript
JS库之Waypoints的用法详解
Sep 13 Javascript
js实现图片放大并跟随鼠标移动特效
Jan 18 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
Jul 24 Javascript
Kibo 用于处理键盘事件的Javascript工具库
Oct 28 #Javascript
stream.js 一个很小、完全独立的Javascript类库
Oct 28 #Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 #Javascript
基于jquery的滚动鼠标放大缩小图片效果
Oct 27 #Javascript
input 和 textarea 输入框最大文字限制的jquery插件
Oct 27 #Javascript
VBS通过WMI监视注册表变动的代码
Oct 27 #Javascript
JavaScript Memoization 让函数也有记忆功能
Oct 27 #Javascript
You might like
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
提高网站信任度的技巧
2008/10/17 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
js中传递特殊字符(+,&amp;)的方法
2014/01/16 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
数学专业推荐信范文
2013/11/21 职场文书
学生打架检讨书
2014/02/14 职场文书
军训感想500字
2014/02/20 职场文书
医学检验专业自荐信
2014/09/18 职场文书
导游词300字
2015/02/13 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB