重新认识json数据格式

张映 发表于 2011-04-20

分类目录: nodejs/vue/js/jquery

标签:, ,

php4时我就用过json,那个时候还没有json_decode,json_encode这样的函数,要把数据转换成json,就要加载一个JSON.php。用的时间挺长,但是我一直对json有一种误解,我总认为json只是数据传输过程中的一个中间阶段,就像xml一样,我总会把他们二联想到一起。

一,什么json

JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。

既然是为javascript准备,js肯定能直接把json数据读取出来,我以前的做法是把json数据转换成数组,或者是对象数组,然后在得到我想要的数据,其实没有这个必要。

二,js可以直接从json中读取数据

  1. <script type="text/javascript">  
  2. /** 
  3.  one对应的数据如下: 
  4. stdClass Object 
  5. ( 
  6.     [stock_id] => 50322 
  7.     [goods_id] => 3998 
  8.     [product_id] => 9777 
  9.     [number] => 300 
  10.     [uptime] => 2011-04-19 04:42:19 
  11. ) 
  12.  */  
  13. var one = {"stock_id":"50322","goods_id":"3998","product_id":"9777","number":"300","uptime":"2011-04-19 04:42:19"};  
  14.   
  15. /** 
  16. two对应的数据如下: 
  17. Array 
  18. ( 
  19.     [0] => stdClass Object 
  20.         ( 
  21.             [stock_id] => 50322 
  22.             [goods_id] => 3998 
  23.             [product_id] => 9777 
  24.             [number] => 300 
  25.             [uptime] => 2011-04-19 04:42:19 
  26.         ) 
  27.  
  28.     [1] => stdClass Object 
  29.         ( 
  30.             [stock_id] => 50327 
  31.             [goods_id] => 3998 
  32.             [product_id] => 9778 
  33.             [number] => 300 
  34.             [uptime] => 2011-04-19 04:41:21 
  35.         ) 
  36.  
  37. ) 
  38. */  
  39. var two = [{"stock_id":"50322","goods_id":"3998","product_id":"9777","number":"300","uptime":"2011-04-19 04:42:19"},  
  40. {"stock_id":"50327","goods_id":"3998","product_id":"9778","number":"300","uptime":"2011-04-19 04:41:21"}];  
  41.   
  42. alert(one["goods_id"]);               //会弹出3998  
  43. alert(two[1]["product_id"]);          //会弹出9778  
  44.   
  45. for(a in one){  
  46. alert(one[a]);                    //把one这个json数据结构的数据都弹出来,a是下标  
  47. }  
  48.   
  49. for(i=0;i<one.length;i++){  
  50. alert(one[i]);                  //不会弹出任何东西,但也不会报错,程序会继续执行,汗  
  51. }  
  52.   
  53. for(a in two){  
  54. for(b in two[a]){  
  55. alert(b+"=>"+two[a][b]);        //把two的所有数据都弹出来,对二维数组对象支持很好  
  56. }  
  57. }  
  58.   
  59. for(i=0;i<two.length;i++){  
  60. alert(two[i]['stock_id']); //这里会弹出,50322,50327在这里可以,为什么一维的不能呢,  
  61. }                               //可以看一下上面的数据,二维的数组下标正好是从0开始的,  
  62. </script>                       //如果把one里面的下标换成数字就可以了。  

有了上面的实验结果,以后在进行异步请时,返回json数据,我就不用在去转换了,说白了,还是要多看,多学,不断提高自己。



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/jsjquery/1243.html