zl程序教程

您现在的位置是:首页 >  前端

当前栏目

深入分析jquery解析json数据

jQuery数据JSONJSON 解析 深入分析
2023-06-13 09:15:32 时间

我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法。

JSON数据如下,是一个嵌套JSON:

复制代码代码如下:


{"comments":[{"content":"很不错嘛","id":1,"nickname":"纳尼"},{"content":"哟西哟西","id":2,"nickname":"小强"}]}

获取JSON数据,在jQuery中有一个简单的方法$.getJSON()可以实现。

下面引用的是官方API对$.getJSON()的说明:

jQuery.getJSON(url,[data,][success(data,textStatus,jqXHR)])

urlAstringcontainingtheURLtowhichtherequestissent.

dataAmaporstringthatissenttotheserverwiththerequest.

success(data,textStatus,jqXHR)Acallbackfunctionthatisexecutediftherequestsucceeds.

回调函数中接受三个参数,第一个书返回的数据,第二个是状态,第三个是jQuery的XMLHttpRequest,我们只使用到第一个参数。

$.each()是用来在回调函数中解析JSON数据的方法,下面是官方文档:

jQuery.each(collection,callback(indexInArray,valueOfElement))

collectionTheobjectorarraytoiterateover.

callback(indexInArray,valueOfElement)Thefunctionthatwillbeexecutedoneveryobject.

$.each()方法接受两个参数,第一个是需要遍历的对象集合(JSON对象集合),第二个是用来遍历的方法,这个方法又接受两个参数,第一个是遍历的index,第二个是当前遍历的值。哈哈,有了$.each()方法JSON的解析就迎刃而解咯。(*^__^*)嘻嘻……

复制代码代码如下:


functionloadInfo(){
   $.getJSON("loadInfo",function(data){
       $("#info").html("");//清空info内容        $.each(data.comments,function(i,item){
           $("#info").append(
                   "<div>"+item.id+"</div>"+
                   "<div>"+item.nickname   +"</div>"+                    "<div>"+item.content+"</div><hr/>");
       });
       });
}

正如上面,loadinfo是请求的地址,function(data){...}就是在请求成功后的回调函数,data封装了返回的JSON对象,在下面的$.each(data.comments,function(i,item){...})方法中data.comments直接到达JSON数据内包含的JSON数组:

复制代码代码如下:
[{"content":"很不错嘛","id":1,"nickname":"纳尼"},{"content":"哟西哟西","id":2,"nickname":"小强"}]

$.each()方法中的function就是对这个数组进行遍历,再通过操作DOM插入到合适的地方的。在遍历的过程中,我们可以很方便的访问当前遍历index(代码中的”i“)和当前遍历的值(代码中的”item“)。

上例的运行结果如下:

如果返回的JSON数据比较复杂,则只需多些$.each()进行遍历即可,嘿嘿。例如如下JSON数据:

复制代码代码如下:
{"comments":[{"content":"很不错嘛","id":1,"nickname":"纳尼"},{"content":"哟西哟西","id":2,"nickname":"小强"}],
"content":"你是木头人,哈哈。","infomap":{"性别":"男","职业":"程序员",
"博客":"http:\/\/www.xxx.com\/codeplus\/"},"title":"123木头人"}

js如下:

复制代码代码如下:
functionloadInfo(){
   $.getJSON("loadInfo",function(data){
       $("#title").append(data.title+"<hr/>");
       $("#content").append(data.content+"<hr/>");
       //jquery解析map数据
       $.each(data.infomap,function(key,value){
           $("#mapinfo").append(key+"----"+value+"<br/><hr/>");
       });
       //解析数组
       $.each(data.comments,function(i,item){
           $("#info").append(
                   "<div>"+item.id+"</div>"+
                   "<div>"+item.nickname   +"</div>"+
                   "<div>"+item.content+"</div><hr/>");
       });
       });
}

值得注意的是,$.each()遍历Map的时候,function()中的参数是key和value,十分方便。