您的位置:首页 > Web前端 > JavaScript

浅谈PHP与javascript之JSON XML 数组 对象三者的区别

2013-04-09 19:15 766 查看
一、认识JSON是什么

先来说说什么是JSON。所谓json即javascript Object Notation (javaScript对象符号).它是基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。JSON是一种结构化的,轻量级的完全独立于语言的,基于文本的数据传输格式,使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等),在很多场合用来代替XML文件格式。在表达相同信息时,JSON比XML更短小,更便于机器解析。当需要表示一组值时,JSON
不但能够提高可读性,而且可以减少复杂性。

JSON在js中可以转换为数组或者对象,通常由服务器端返回的json文本数据传递给js中后,由eval函数解析并返回一个对象或者数组的实例。

JSON按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对":{ "Name": "freshlover" }

可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:

var 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": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
] }


尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进 JavaScript 变量之后,就可以很轻松地访问或者修改它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面这样的代码:

people.programmers[0].lastName;注意,数组索引是从零开始的。

当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在 JavaScript 中这种转换也很简单:

String newJSONtext = people.toJSONString();

这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。

更重要的是,可以将 任何JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject的对象进行转换,只需执行相同形式的命令:

String myObjectInJSON = myObject.toJSONString();

这就是 JSON 与本系列讨论的其他数据格式之间最大的差异。如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用 Document Object Model 这样的 API(提供了将自己的数据结构转换为文本的函数),也需要学习这个 API 并使用 API 的对象,而不是使用原生的 JavaScript 对象和语法。

最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。

二、用javascript处理JSON举例

对如下json数据,我们创建了只包含一个成员 "bindings" 的一个对象,bindings 则包含了一个由3个对象组成的数组。这3个对象都包含3个成员:"ircEvent", "method","regex":

js 代码:

var myJSONObject = {"bindings": [  
            {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},  
            {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},  
            {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}  
        ]  
    };


在javascript 中, 成员可以通过“点号”来获取。

比如:

js 代码:

myJSONObject.bindings[0].method


通过eval() 函数可以将JSON字符串转化为对象。

js 代码:

var myObject = eval('(' + myJSONtext + ')');


eval 函数非常快,但是它可以编译任何 javascirpt 代码,这样的话就可能产生安全的问题。eval 的使用是基于传入的代码参数是可靠的假设的,有一些情况下,可能客户端是不可信任的。

如果基于安全的考虑的话,最好是使用一个 JSON 解析器。 一个 JSON 解析器将只接受 JSON 文本。所以是更安全的。

js 代码:



var myObject = JSON.parse(myJSONtext, filter);


可选的 filter 参数将遍历每一个value key 值对, 并进行相关的处理。如:

js 代码:

myData = JSON.parse(text, function (key, value) {       
	return key.indexOf('date') >= 0 ? new Date(value) : value;  
});


stringifier 函数的作用跟 parse 相反, 用来将一个js对象转换为 JSON 文本。

js 代码:

var myJSONText = JSON.stringifier(myObject);


这里是一个开源的 JSON parser and JSON stringifier,下载地址:http://www.json.org/json2.js

PHP服务器端返回JSON字符串,可以通过手动拼接构造json格式的数据,也可以利用PHP现有函数进行转换,如json_encode()。当客户端获取到服务器返回的json字串,往往需要进行加工或转换为需要的类型,常见的是对象/数组。

比如:data = eval('(' + data + ')'); 实现转换为数组,必要时候可以对数据进行循环处理 for(var i=0;i<jsondataObj.length;i++)//对json数组循环。

三、JSON和js数组的区别

一,数组

1. 定义一维数组:var s1=new Array();

s1=[1,2,3,4]或者s1[0]=1,s1[1]=2,s1[3]=3,s1[4]=4;

alert(s1[0]);

结果为1;

2.定义二维素组:var s1=new Array();

var s1=[[3,1],[2,3,4],3,[4,5,6,7,8]];

alert(s1[1][0]);

结果为2;



二,定义json对象

1,json对象

var status_process = {

" name5" : '闲置期',

"name1" : '播种期',

"name2" : '苗期',

"name3" : '生长期',

"name4" : '采收期'

}

alert(status_process);

结果为:Object:Object;

2,json字符串

所谓json字符串,是指该字符串变量的值与json的格式相同,但是不是json对象,比如:

var s1="{";

var s2 = " 'name5' : '闲置期', 'name1' : '播种期','name2' : '苗期','name3' : '生长期','name4' : '采收期'";

var s3="}";

var status_process=s1+s2 +s3;

虽然status_process的值符合json对象的格式,但是它不是对象,只是一个字符串(是拼凑出来的);

将字符串转换为json对象使用函数eval,eval("(" + status_process+ ")");

结论:从后台传入到前台的是json字符串,不是真正的json对象,因此需要使用eval函数转换。



3,json对象的使用

var status_process = {

name5 : '闲置期',

name1 : '播种期',

name2 : '苗期',

name3 : '生长期',

name4 : '采收期'

};

alert(status_process["name5"]);

alert(status_process.name5);

结果两个都为:闲置期



4,json二维对象

var status_process = {

name5 : {name3:'空闲闲置期'},

name1 : '播种期',

name2 : '苗期',

name3 : '生长期',

name4 : '采收期'

};

alert(status_process["name5"]["name3"]);

alert(status_process.name5.name3);

结果都为:'空闲闲置期'

五、XMLHttpRequest对象的属性responseText与responseXML

针对纯文本格式以及XML格式的响应数据,XMLHttpRequest对象提供了对应的两个属性,一个是属性responseText,即将响应提供为一个串。另一个属性为responseXML,即将响应提供为一个XML对象。

responseText是将响应信息作为字符串返回,此属性只读,将响应信息作为字符串返回。

XMLHTTP尝试将响应信息解码为Unicode字符串,XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据带BOM(byte-order mark),XMLHTTP可以解码任何UCS-2 (big or little endian)或者UCS-4 数据。注意,如果服务器返回的是xml文档,此属性并不处理xml文档中的编码声明。你需要使用responseXML来处理。

responsebody是二进制的.

responsexml是xml的

responsetext就是html源码的

六、JSON和XML的异同

两者都是数据交换格式,xml 更适合人类阅读,json更适合机器阅读一点。但存储相同的数据JSON所占的空间要小得多,可以直接在javascript中表示。

可扩展性 XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: