zoukankan      html  css  js  c++  java
  • 使用Jquery解析Json基础知识

    前言

    在WEB数据传输过程中,json是以文本,即字符串的轻量级形式传递的,而客户端一般用JS操作的是接收到的JSON对象,所以,JSON对象和JSON字符串之间的相互转换、JSON数据的解析是关键。

    先明确2个概念例如:

    JSON字符串:

    var str1 = '{ "name": "deyuyi", "sex": "man" }';

    JSON对象:

    var str2 = { "name": "deluyi", "sex": "man" };

    可以简单这样理解:

    JSON对象是直接可以使用JQuery操作的格式,如C#中可以用对象(类名)点出属性(方法)一样;

    JSON字符串仅仅只是一个字符串,一个整体,不截取的话没办法取出其中存储的数据,不能直接使用,除非你只想alert()他;

    一、JSON字符串转换为JSON对象

    要使用上面的str1,必须使用下面的方法先转化为JSON对象:

    A:eval函数

    eval函数可以直接将本质符合或者近似符合JSON格式的字符串转换为JSON对象,使用方式如:

    eval('(' + str + ')'); //其中str就是满足本标题描述的字符串

    复制代码
        //由JSON字符串转换为JSON对象
        var str='{ "name": "John" }';
        var obj = eval('(' + str + ')'); 
        alert( obj.name);
    
        var str2="{ 'name': 'John' }";
        var obj2 = eval('(' + str2 + ')'); 
        alert( obj2.name);
    
        var str3="{ name: 'John' }";
        var obj3 = eval('(' + str3 + ')'); 
        alert( obj3.name);
    复制代码

    以上均会输出结果“john”。

    Eval方式可以转换以下标准和非标准格式字符串:

       var str="{ 'name': 'John' }";
       var str2='{ "name": "John" }';
       var str3="{ name: 'John' }";

    参见本例下载包中:JqueryDemo1.html

    B:parseJSON函数

    另一种将标准字符串转换为JSON对象的函数是parseJSON(),使用方式如jQuery.parseJSON(str)//其中str就是满足本标题描述的字符串

        //由JSON字符串转换为JSON对象
        var str='{ "name": "John" }';
        var obj = jQuery.parseJSON(str)
        alert("1"+ obj.name);

    以上均会输出结果“john”。

    此种方式仅支持标准格式:var str='{ "name": "John" }';

    参见本例下载包中:JqueryDemo2.html

    C:JSON.parse函数

    还有一种将标准字符串转换为JSON对象的函数是JSON.parse(),使用方式如JSON.parse(str)//其中str就是满足本标题描述的字符串

            var str = '{ "name": "mady", "age": "24" }';
            var obj = JSON.parse(str);
            alert(obj.name);

    以上均会输出结果“john”。

    此种方式仅支持标准格式:var str='{ "name": "John" }';

    参见本例下载包中:JqueryDemo3.html

    以上结果一致,均输出姓名,如下图:

    clip_image002

    特别注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题(抛出语法异常)。

    D:Other方式

    如果忍不住想犯错,十分十分想解析非标准、非正规字符串,如:

          {name:mady,age:23}

    或者

          {name:’mady’,age:23}

    以及其他的你能想到的各种本质正确的非法格式,那么有扩展库可以解决

    jquery-json 扩展库

    下载地址在这里:http://code.google.com/p/jquery-json/

    这个库用来扩展 jQuery ,对于 JSON 的使用,扩展了两个函数:toJSONparseJSON

    toJSON 函数用来将一个普通的 JavaScript 对象序列化为 JSON 对象。

    parseJSON函数用来将一个普通的 JavaScript 对象序列化为 JSON 对象too。

    复制代码
          var data=$.toJSON({ x: 2, y: 3 }); 
          var obj = jQuery.parseJSON(data); 
          alert(obj.x); 
          var str = {plugin: 'jquery-json', version: 2.3}; 
          var data2=$.toJSON(str); 
          var obj2 = jQuery.parseJSON(data2); 
          alert(obj2.plugin);
    复制代码

    以上代码执行结果如:

    imageclip_image004

    参见本例下载包中:JqueryDemo5.html

    二、将JSON对象转换为字符串

    可以使用toJSONString()或者全局方法JSON.stringify()将JSON对象转化为JSON字符串。

    例如:

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

    或者

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

    alert(last);

    三、解析读取JSON

    我们通过各种方式将字符串转换为JSON对象后就是解析他了。

    如上面的例子:

          var str2 = { "name": "mady", "sex": "man" };

    就可以这样读取:

          alert(str2.name);//和C#一样直接往出点…

    弹出” mady”。

    我们遇到的JSON很少有这么简单的,比如复杂一点的JSON对象如:

          var str={"GetUserPostByIdResult":{"Age":"33","ID":"2server","Name":"mady"}};

    解析用:

          alert(str.GetUserPostByIdResult.Name);//一次点不出来,我多点几次

    弹出:”mady”。

    再再复杂一点的如:

          var data=" { root: [ {'name':'6200','value':'0'}, {'name':'6101','value':'xa'}, {'name':'6102','value':'beijing'}, {'name':'6103','value':'haerbin'}]}";

    如果你想单挑的话,解析用:

          alert(dataObj.root[0].name);

    弹出:“6200”。

    如果你想群挑的话,解析用:

          $.each(dataObj.root, function(index, item) {
                $("#info").append(
                        "<div>" +index+":"+ item.name + "</div>" + 
                        "<div>" +index+":"+ item.value + "</div><hr/>");
            });

    其中这个“#info”是个DIV的ID。输入结果如下图:

    clip_image006

    参见本例下载包中:JqueryDemo4.html

    注意:本例如果要使用其他转换函数请更改字符串内单引号为双引号,外引号为单引号。

    本文章所有代码:点击下载

  • 相关阅读:
    UVALive 5983 MAGRID DP
    2015暑假训练(UVALive 5983
    poj 1426 Find The Multiple (BFS)
    poj 3126 Prime Path (BFS)
    poj 2251 Dungeon Master 3维bfs(水水)
    poj 3278 catch that cow BFS(基础水)
    poj3083 Children of the Candy Corn BFS&&DFS
    BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)
    洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
    洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
  • 原文地址:https://www.cnblogs.com/netserver/p/4525200.html
Copyright © 2011-2022 走看看