代码改变世界

关于json的一些误解

2013-12-25 11:30  低调de草原狼  阅读(216)  评论(0编辑  收藏  举报

写在前边

写这篇文章也是写给自己看的,毕竟写了这么长时间代码了,今天仔细看了下json,突感其实真的对json这方面的知识掌握的并不是特别的透彻,那么我们今天在这里进行下讨论:

json学习推荐:http://www.w3school.com.cn/json/

json在线验证器推荐:http://www.bejson.com/go.php?u=http://www.bejson.com/index.php

我们理解的json对象真的对吗?

首先其实包括我在内的一大部分程序员,都经常说将json字符创转换为json对象,将json对象转换为json格式的字符串,其实这种说法并不是特别的合理,当然,本人并非咬文嚼字之人,但是这个概念还是应该区分一下的。

关于json的格式以及它的一些基本概念,我们在这里就不多做解释了,大家自行看我上边的推荐就可以了,相信大家也对json有着比较深入的了解,我们今天就我之前对json的误解做一些解释,如果已经对其有深入了解的朋友请绕过,或者看完后批评指正。

好的’闲话少叙。

json只不过是前后台为了方便传输,所做的一种固定格式的字符串,首先,我们说下我刚才说的(“json字符创转换为json对象,将json对象转换为json格式的字符串”)为什么不对,举个例子大家就明白了

var testJson = '{"a":"b"}'

上边是json字符串

var testJson = {"a":"b"}

上边是json格式的对象字面量,而非json对象

通过上边的例子其实我们可以得出一个结论,其实这个取决于上下文,在string上下文里使用带有大括号的JavaScript对象,那它就是JSON字符串,而如果在对象字面量上下文里使用的话,那它就是对象字面量。

json格式验证

另外需要说的一点问题就是大家可能有时候经常觉得为什么解析后的json格式的对象报错,自己再查看的时候又比较费劲,可以尝试下上边推荐的json在线验证器,个人感觉比较方便。

json解析

其实并非没有json对象,只不过并非我们之前传统意义上认识到的json对象,而且这也是我们为什么将上边的概念区分开的一个非常重要的理由,在新版的浏览器里JSON对象已经被原生的内置对象了,目前有2个静态方法:JSON.parse用来将JSON字符串反序列化成对象,JSON.stringify用来将对象序列化成JSON字符串。老版本的浏览器不支持这个对象,但你可以通过json2.js来实现同样的功能。

如何解析json格式的字符串成为javascript对象字面量呢?这个地方我们可以有几个方式,我们在上边推荐的w3cSchool中的json学习中也有比较详细的讲解,在这里我们就简单的带过,首先eval这种方式,由于安全问题,我们基本弃用,另外在一些老版的浏览器中并不支持JSON对象的这种解析,我们可以引入外部包的方式解决,https://github.com/douglascrockford/JSON-js这里边json2.js较好的解决了这个问题,大家可以尝试下。