理解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 相关文章推荐
jquery 表单取值常用代码
Dec 22 Javascript
js取消单选按钮选中并判断对象是否为空
Nov 14 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
Aug 21 Javascript
JavaScript实现强制重定向至HTTPS页面
Jun 10 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
Aug 24 Javascript
jquery遍历函数siblings()用法实例
Dec 24 Javascript
JavaScript制作简单的日历效果
Mar 10 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
Feb 23 Javascript
脚手架vue-cli工程webpack的作用和特点
Sep 29 Javascript
微信小程序日历/日期选择插件使用方法详解
Dec 28 Javascript
微信小程序一周时间表功能实现
Oct 17 Javascript
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
js中的闭包实例展示
2018/11/01 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
js实现日历
2020/11/07 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
基于python编写的微博应用
2014/10/17 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Django中的用户身份验证示例详解
2019/08/07 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
python中entry用法讲解
2020/12/04 Python
python 实现客户端与服务端的通信
2020/12/23 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
《再见了,亲人》教学反思
2014/02/26 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
数学教师个人工作总结
2015/02/06 职场文书
地雷战观后感
2015/06/09 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python