中国最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2

json教程

  • 关于 JSON
  • JSON 教程

    json格式

    JSON解析

    JSON遍历

    JSON调用

    JSON转换

    JSON获取

    JSON字符串

    JSON数组

    js/jquery解析json和数组格式的方法详解

    阅读 (2271)

    在解析之前,我们必须弄清楚几个概念:数组,关联数组以及json之间有哪些区别和联系点?

    一.概念介绍
    1.数组

    语法: 
    ECMAScript v3规定了数组直接量的语法,JavaScript 1.2和JScript 3.0实现了它。可以把—个用逗号分隔的表达式列表放在方括号中,创建并初始化—个数组。这些表达式的值将成为数组元素。例如:

    var a = [1, true, 'abc'];

    具体操作查看API.

    ps:必须方括号隔开。


    2.关联数组

    (1)语法:
    var myhash= {”key1″:”val1″, “key2″:”val2″ };//obj

    (2)var
    myhash= {key1:”val1″, key2:”val2″ };//obj-也可以

    ps:跟json格式几乎相同,但是json格式要求更加严格(里面的键值对必须使用双引号),但json只能作为一种格式标准,如果要对其进行操作必须转换成关联数组对象(obj)。


    2.简单操作
    (1)向Hash关联数组添加键值

     // 添加一个新键 newkey ,键值为 newval

     myhash[”newkey”] = “newval”;

    (2)删除Hash关联数组已有键值

     // 删除一个键 newkey ,同时,该键值对应的 newval 也就消失了
     delete myhash[”newkey”];

     (3)遍历Hash关联数组

     // 遍历整个hash 数组 
     for (key in myhash) {
     val = myhash[key];
     }

    (4)获得值

     方式1.myhash.key1
     方式2.myhash.key2


    3.json
    格式要求:

    {”key1″:”val1″, “key2″:”val2″ };//严格按照此格式,操作可依照关联数组的操作


    二.前后台交互中几个关键点
    1.当服务器发送的数据不是一条json,而是多条json时,则应当联系数组和关联数组来组装字符串
    例如:var objs = [{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}];

    2.至始至终服务器给客户端的数据都只是字符串,因此为了让其能够在js中对其进行必要的操作,可以通过eval()进行转换成js可执行的对象。
    因此jQuey中提供的$.parseJSON()是有局限的,如果是上面1提到的这种情况则就必须使用eval()进行转换,然后再通过$.each(objs,function(i,o){...})进行操作


    三.具体的实例代码

    页面代码:

    代码如下:

    <body>
     <input type="button" value="send ajax json" onclick="sendAjaxByjson();"/>
     <input type="button" value="send ajax array" onclick="sendAjaxByarray();"/>
    </body>
    
     <script type="text/javascript">
      function sendAjaxByjson(){
       $.post("json",{},function(data){
        var obj=data;
        alert(typeof obj);//string
        //var a=eval(obj);不解,不注释则会报错..
        var strToobj=$.parseJSON(obj);
        alert(strToobj.name);
        alert(typeof strToobj)//obj
        var obja={'name':'techbirds','age':'23','sex':'male'};
        alert(typeof obja);//obj
        alert(obja['name']+":"+obja.age);
        delete obja['name'];
       });
      }
      function sendAjaxByarray(){
       $.post("array",{},function(data){
        var str=data;
        alert(typeof str);//string
        alert(typeof eval(str));//object
        var obja=[1,2,3,4,5];
        alert(typeof obja);//object
    
       });
      }
     </script>
    

    后台代码:

    代码如下:

    @Override
     protected void service(HttpServletRequest req, HttpServletResponse reps)
       throws ServletException, IOException {
      Map<String, Object> jsonMap=new HashMap<String, Object>();
      jsonMap.put("name", "techbirds");
      jsonMap.put("age", 23);
      jsonMap.put("sex", "male");
      reps.getWriter().print(JSONObject.fromObject(jsonMap).toString());
      reps.getWriter().flush();
      reps.getWriter().close();
     }
    

    代码如下:

    @Override
     protected void service(HttpServletRequest req, HttpServletResponse reps)
       throws ServletException, IOException {
      String array="[1,2,3,4,5,6]";
      reps.getWriter().print(array);
      reps.getWriter().flush();
      reps.getWriter().close();
     }
    

    Jquery解析json数组字符串

    一个json对象数组的json字符串:

    var str=[{"Price":12,"Name":"aaa","Age",22},{"Price":24,"Name":"bbb","Age",33}];
    在前台,使用jquery的parseJSON方法来进行解析,并用jquery的foreach的方法来进行解析,代码如下:

    var jsonarray= $.parseJSON(str);
    alert(jsonarray);
    $.each(jsonarray, function (i, n)
    {
        alert(n.Price);
    }
    
    对于不同版本的jquery来说,它们解析的json对象数组的字符串格式也不同(我使用了两个不同版本的jquery,就遇到了这样的问题),如果上述代码无法解析,就用eval函数来包裹一下,代码如下:
    var jsonarray= $.parseJSON(str);
    $.each(eval("(" + jsonarray+ ")"), function (i, n) {
        alert(n.Price);
    }
    
    在解析json对象数组字符串的过程中,也可以使用alert来弹出$.parseJSON(str)解析后的结果,如果弹出的对话框中显示object,则说明解析成功了,可以通过对象.属性名获得到对应属性的值,如果弹出的不是object,则用eval()来进行包装一下形成对象,再获得对应属性的值。

    关闭
    程序员人生