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中读取数据
<script type="text/javascript"> /** one对应的数据如下: stdClass Object ( [stock_id] => 50322 [goods_id] => 3998 [product_id] => 9777 [number] => 300 [uptime] => 2011-04-19 04:42:19 ) */ var one = {"stock_id":"50322","goods_id":"3998","product_id":"9777","number":"300","uptime":"2011-04-19 04:42:19"}; /** two对应的数据如下: Array ( [0] => stdClass Object ( [stock_id] => 50322 [goods_id] => 3998 [product_id] => 9777 [number] => 300 [uptime] => 2011-04-19 04:42:19 ) [1] => stdClass Object ( [stock_id] => 50327 [goods_id] => 3998 [product_id] => 9778 [number] => 300 [uptime] => 2011-04-19 04:41:21 ) ) */ var two = [{"stock_id":"50322","goods_id":"3998","product_id":"9777","number":"300","uptime":"2011-04-19 04:42:19"}, {"stock_id":"50327","goods_id":"3998","product_id":"9778","number":"300","uptime":"2011-04-19 04:41:21"}]; alert(one["goods_id"]); //会弹出3998 alert(two[1]["product_id"]); //会弹出9778 for(a in one){ alert(one[a]); //把one这个json数据结构的数据都弹出来,a是下标 } for(i=0;i<one.length;i++){ alert(one[i]); //不会弹出任何东西,但也不会报错,程序会继续执行,汗 } for(a in two){ for(b in two[a]){ alert(b+"=>"+two[a][b]); //把two的所有数据都弹出来,对二维数组对象支持很好 } } for(i=0;i<two.length;i++){ alert(two[i]['stock_id']); //这里会弹出,50322,50327在这里可以,为什么一维的不能呢, } //可以看一下上面的数据,二维的数组下标正好是从0开始的, </script> //如果把one里面的下标换成数字就可以了。
有了上面的实验结果,以后在进行异步请时,返回json数据,我就不用在去转换了,说白了,还是要多看,多学,不断提高自己。
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/jsjquery/1243.html