json

来源:互联网 发布:足彩过滤软件 编辑:程序博客网 时间:2024/06/05 15:11

什么叫json:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 

原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。

简单的讲:JSON是一种基于文本的数据交换方式,或者叫做数据描述格式,你是否该选用他首先肯定要关注它所拥有的优点。

 

为什么出现了json:

尽管有许多宣传关于 XML 如何拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的 Web 应用中,开发者经常为 XML 的解析伤透了脑筋,无论是服务器端生成或处理 XML,还是客户端用 JavaScript 

解析 XML,都常常导致复杂的代码,极低的开发效率。实际上,对于大多数 Web 应用来说,他们根本不需要复杂的 XML 来传输数据,XML 的扩展性很少具有优势,许多 AJAX 应用甚至直接返回 HTML 片段来构建动态 Web 页面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。 

现在, JSON 为 Web 应用开发者提供了另一种数据交换格式。JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单

 

json与xml区别:

   xml 结构化描述 json 键值对描述

   json 是纯文本对机器友好,xml 对人友好

   json 效率高于 xml

   xml json 都可以通过通过 JavaScript 进行解析

   xml JSON 数据可使用 AJAX 进行传输

相比 XML 的不同之处:

 没有结束标签

 更短

 读写的速度更快

 能够使用内建的 JavaScript eval() 方法进行解析

 使用数组

 不使用保留字

 

在JSON中,有两种结构:对象和数组。

 

1. 一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间运用 “,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:

Var  o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};

    访问:  alert(o.xlid);

var j={"name":"Michael",

      "address":{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

  };   我们来输出:

  document.write(j.name);   document.write(j.address.city); 

 

我们来看一下在js中如何定义一个二维数组:

var stu2= new Array();

    stu2['address']=new Array();

    stu2['address']['city']='aaa'

   alert(stu2.address.city);

 

2. 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。

 

例如:

   var jsonranklist=[

{"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"},

{"xlid":"zd","xldigitid":123456,"topscore":1500,"topplaytime":"2009-11-20"}

       ];

访问: jsonranklist[0].xlid

 

在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

 

    JSON字符串:  var str1 = '{ "name": "cxh", "sex": "man" }'; 注意之这里 ‘’

 

    JSON对象:  var str2 = { "name": "cxh", "sex": "man" }; 注意这里没有 ‘’

 

JSON字符串转换为JSON对象: var obj = eval('(' + str1 + ')'); 或者 var obj = str1.parseJSON(); //由JSON字符串转换为JSON对象

然后,就可以这样读取:

  Alert(obj.name);

  Alert(obj.sex);

 

JSON对象转换为JSON字符串

toJSONString()或者全局要领 JSON.stringify()将JSON对象转化为JSON字符串。

 

例如:

    var last=obj.toJSONString(); //将JSON对象转化为JSON字符

    或者

    var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

    alert(last);

 

注意: 除了eval()函数是js自带的之外,其他的多个要领都来自json.js包。如果提示找不到toJSONString()和parseJSON()要领,则说明您的json版本太低。

 

php 转换json:

   json_encode();   json_deconde();

jquery 使用json

ajax异步返回的数据:

var data=" 

root: [ 

{name:'1',value:'0'}, 

{name:'6101',value:'西安市'}, 

{name:'6102',value:'铜川市'}, 

{name:'6103',value:'宝鸡市'}, 

{name:'6104',value:'咸阳市'}, 

{name:'6105',value:'渭南市'}, 

{name:'6106',value:'延安市'}, 

{name:'6107',value:'汉中市'}, 

{name:'6108',value:'榆林市'}, 

{name:'6109',value:'安康市'}, 

{name:'6110',value:'商洛市'} 

}";

//服务器返回json处理 :如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次。

这种方式也适合以普通javascipt方式获取json对象;对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变

var dataObj=eval("("+data+")");//转换为json对象  eval 最好少用

alert(dataObj.root.length);//输出root的子对象数量 

$.each(dataObj.root,function(index,item){

   if(index==0){ 

    return true; 

  } 

  //输出每个root子对象的名称和值 

  alert("name:"+item.name+",value:"+item.value); 

}) 

对于服务器返回的JSON字符串,如果jquery异步请求将dataType: 'json',,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,

因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法

$.getJSON("http://test.php",{param:"gaoyusi"},function(data){ 

//此处返回的data已经是json对象 

$.each(data.root,function(idx,item){  //循环上面的数据

if(idx==0){ 

return true;//同countinue,返回false同break 

alert("name:"+item.name+",value:"+item.value); 

}); 

}); 

0 0
原创粉丝点击