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

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

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

  • 相关阅读:
    【C++学习】C++中的new VS C语言中的malloc
    【C++学习】多态——解析树实例分析
    【C++错误处理】multiple definition of
    VS.NET控件命名规范
    ASP.NET跨页面传值技巧总结
    marquee+js实现某个区域的“无缝滚动效果”
    vs2008与oracle数据库连接
    C#中HashTable的用法
    1. asp.net实现单点登陆
    GridView实现某列中相同值合并(不规则表)
  • 原文地址:https://www.cnblogs.com/mili3/p/4744929.html
Copyright © 2011-2022 走看看