zoukankan      html  css  js  c++  java
  • json数据格式的使用

    刚开始做项目,在很多时候都用到了JSON数据格式,如果你了解JSON结构,那使用JSON进行数据传递简直是太美妙了,可以写出很实用美观可读性强的代码。而如果不知道JSON的结构而去解析JSON的话,那简直是噩梦。费时费力不说,代码也会变得冗余拖沓,得到的结果也不尽人意。感觉Json很重要,下面总结一下我对这种格式的理解!

    1.   JSON是什么?

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。

    2.   JSON的具体形式

    (1)对象是一个无序的“‘键/值’对”集合(有的语言中理解为object或record)。一个对象以“{”开始,以“}”结束。每个“名称”后跟一个“:”,“键/值’对”之间使用“,”分隔。例如{id:”1”,name:”张三”},很多网站上都是将键和值都用双引号括起来,像这样{“id”:”1”,”name”:”张三”},我认为在实际的项目中只需要把”值”括起来就可以了,也可以把双引号都改为单引号(值为true,false,null 或者整数除外)。

    (2)数组是值(value)的有序集合。一个数组以“[”开始,“]”结束。值之间使用“,”分隔。例如:[{id:”1”,name:”张三”},{id:”2”,name:”李四”}]

    (3)值(value)可以是双引号括起来的字符串(String)、数值(number)、true、false、null、对象(object)或者数组(array)。对象(object)或者数组(array)可以嵌套。例如:{name:"Michael",address:{city:"北京",street:"长安街","postcode":100025}}

    3. JavaScript处理 JSON数据(网上的例子,我用的是jQuery)

    上面介绍了如何用 JSON 表示数据,接下来,我们还要解决如何在服务器端生成 JSON 格式的数据以便发送到客户端,以及客户端如何使用 JavaScript 处理 JSON 格式的数据。

    如何在 Web 页面中用 JavaScript 处理 JSON 数据。我们通过一个简单的 JavaScript 方法就能看到客户端如何将 JSON 数据表示给用户:

    function handleJson() {

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

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

      };

       document.write(j.name);

       document.write(j.address.city);

     }

    只需将其赋值给一个 JavaScript 变量,就可以立刻使用该变量并更新页面中的信息了。

    4.用jquery解析JSON数据的方法

    作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明。

    这里首先给出JSON字符串集,字符串集如下:

    代码如下:
    var data=" 

    root: 

    {name:'1',value:'0'}, 
    {name:'6101',value:'北京市'}, 
    {name:'6102',value:'天津市'}, 
    {name:'6103',value:'上海市'}, 
    {name:'6104',value:'重庆市'}, 
    {name:'6105',value:'渭南市'}, 
    ]
    }"; 
    这里以jquery异步获取的数据类型——json对象和字符串为依据,分别介绍两种方式获取到的结果处理方式。(1)对于服务器返回的JSON字符串放于eval()中执行一次。这种方式也适合以普通javascipt方式获取json对象,以下举例说明:

    vardataObj=eval("("+data+")");//转换为json对象

    为什么要 eval这里要添加 “("("+data+")");//”呢?

    原因在于:eval本身的问题。由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。,如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
    alert(eval("{}"); // return undefined
    alert(eval("({})");// return object[Object]

    alert(dataObj.root.length);//输出root的子对象数量 
    $.each(dataObj.root,fucntion(idx,item){ 
    if(idx==0){ 
    return true; 

    //输出每个root子对象的名称和值 
    alert("name:"+item.name+",value:"+item.value); 
    }) 
    注:对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变

    .对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可。

    (2)第二种解析方式就是使用Function对象来完成,它的典型应用就是在JQUERY中的AJAX方法下的success等对于返回数据data的解析

    varjson='{"name":"CJ","age":18}';
    data =(newFunction("","return "+json))();

    此时的data就是一个会解析成一个 json对象了.

    再来晒一下我项目中Service的实现类里的一段代码,功能是列出所有的单位信息:

     @Override
     public StringBuilder listBuilderUnitSet() {
      StringBuilder builder = new StringBuilder();
      List<UnitSet> list = unitSetDao.listUnitSet();
      Iterator<UnitSet> iter = list.iterator();

      builder.append("[{name:'单位', level:'0'}");  
      while(iter.hasNext()){
       UnitSet unitSet = iter.next();
       builder.append(", {name:'").append(unitSet.getUnitSetName())
       .append("', level:'1', id:'").append(unitSet.getId())
       .append("', unitSetName:'").append(unitSet.getUnitSetName())
       .append("'}");   
      }
      builder.append("]");
         
      return builder;
     }

  • 相关阅读:
    React在componentDidMount里面发送请求
    React 术语词汇表
    React里受控与非受控组件
    React和Vue等框架什么时候操作DOM
    【LeetCode】79. Word Search
    【LeetCode】91. Decode Ways
    【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)
    【LeetCode】1. Two Sum
    【LeetCode】141. Linked List Cycle (2 solutions)
    【LeetCode】120. Triangle (3 solutions)
  • 原文地址:https://www.cnblogs.com/Jian-Zhang/p/5112317.html
Copyright © 2011-2022 走看看