JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,是一种基于文本,独立于语言的轻量级数据交换格式;我们也知道XML也是一种数据交换格式,而且xml的使用非常广泛,几乎所有的编程语言都对xml有很好的支持,那这次为什么我们选择了JSON呢?
从我自身来说,学习了JavaScript之后第一次做项目,手生,JSON相对于xml来说无论是文档的构建还是解析都是比较容易的,它的结构类似于对象,解析的代码也很简单,容易上手;从整个项目来说,这个项目不大,但时间给的少,我们采用敏捷开发的方式进行,其中也使用到了EASY-UI框架,用的相对多的就是datagrid了,我们使用json转换的数据可以很方便的与这个框架合作,无论是显示数据还是保存数据都是很方便的,代码量很少,也很简单。
以上是我做项目之前对json的简单理解,事物都有两面性,json也跑不了,下面我用比较官方一点的语言描述一下JSON的优缺点
优点:
1. 使用JSON的数据分隔符,它们简化了数据访问。使用这些数据分隔符时, JavaScript引擎对数据结构(如字 符串、数组、对象)的内部表示恰好与这些符号相同。
2. JSON的另一个优点是它的非冗长性。在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而 在JSON中,所有这些要求只需通过一个简单的括号即可满足。在包含有数以百计字段的数据交换中,传统的XML 标记将会延长数据交换时间
3. JSON受到了擅长不同编程语言的开发人员的青睐。这是因为无论在Haskell中或 Lisp中,还是在更为主流的C#和Java中,开发都可以方便地生成JSON。
不足:
1.和许多好东西都具有两面性一样,JSON的非冗长性也不例外,为此JSON丢失了XML具有的一些特性。命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间。JSON与XML的另一个差别是属性的差异,由于JSON采用冒号赋值,这将导致当XML转化为 JSON时,在标识符(XML CDATA)与实际属性值之间很难区分谁应该被当作文本考虑。
2.JSON片段的创建和验证过程比一般的XML稍显复杂。从这一点来看,XML在开发工具方面领先于JSON。
大概了解了JSON的特点,下面我们从例子中体会它是否给我们带来了方便
JSON的两种结构——对象和数组
1.对象结构
对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。
{ key1:value1, key2:value2, ... }
其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组
2.数组结构
数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码。
[ { key1:value1, key2:value2 }, { key3:value3, key4:value4 } ]
认识JSON字符串和JSON对象
在js 中使用双引号或单引号的字符都是字符串,而json字符串其实就是符合json格式的字符串,这样一说你是不是就知道json字符串的格式了呢?无非是在json格式外加上单引号或双引号。例如:var StrJson="{ test: "inquireTargetName", checkedYearValue: "2014"}";那JSON对象长什么样呢?双引号包括的就是JSON对象
JSON在项目中的使用方法
虽然上边提到了xml与json的区别,但是他们传输数据的过程基本一致,如下:
在JS中使用JSON
JS中使用“.”操作符和key的方式读写JSON数据
1.定义JSON对象
var obj = {
TargetName: "基层组织建设",
UnitName:“市委组织部”,
City: [ //数组结也可以嵌套在json对象中使用
{
id: 1,
CityName: "安次区",
},
{
id: 2,
CityName: "广阳区"
}
],
ObjInquire: { //对象结构当然也可以嵌套在json对象中使用
id: 1,
test: "InquireCityName"
}
};
2.从JSON中读数据
function test() {
alert(obj.TargetName);
alert(obj["TargetName"]);//以上两种情况一致
alert(obj.City[0].CityName);
alert(obj.City[0]["CityName"]);//以上两种情况一致
alert(obj.ObjInquire.test);
alert(obj.ObjInquire["test"]);//以上两种情况一致
}
3.往JSON中写数据
function Add() {
obj.Year= 2014
obj["Year"]=2014
}
4.修改JSON中的数据
obj.Name="市委组织部考核";
obj["Name"]="市委组织部考核";
5.删除JSON中的数据
delete obj.Name;
delete obj["Name"];
在一般处理程序中使用JSON
JSON序列化
使用序列化将从数据库中查询到的数据转换为JSON格式字符串传回客户端,这里用到的是JsonConvert对象的SerializeObject方法。其语法格式为:JsonConvert.SerializeObject(object)。例如:
//json序列化
String strData = JsonConvert.SerializeObject(arr.ToArray());
//将数据返回到页面
context.Response.Write(strData );
这种序列化的方式需要下载 Newtonsoft.Json.dll,下载地址为:点击打开链接,还需要添加using Newtonsoft.Json;using Newtonsoft.Json.Converters;
JSON序列化的方式还有很多,还可以通过自己写的方法转换格式,这里就不一一介绍了。
总结:刚开始了解json的时候是在王兴奎老师讲的ajax中,里边就稍稍提了一下,当时我就百度百科了一下,也没做更多的了解,后来做项目时才发现原来JSON在我们的项目中是必需品,这时才塌下心来查资料,做更多的了解,开始时觉得挺神秘的,项目做的差不多了也发现这个确实挺好用的,前提的前提就是有现成的JSON格式,呵呵,写JSON还没有研究过,用的是小崔师哥给写好的,我想这个有一天我也需要会吧!