php中使用json_encode问题

先看看下面的代码,就知道是什么问题了.

header("Content-Type:text/html;charset=utf-8");
$array = array('湖北','盛天','网络 ','研发部');
echo json_encode($array);
echo "<hr/>";

$array = array(0=>'湖北',3=>'盛天',5=>'网络 ',6=>'研发部');
echo json_encode($array);

$array = array('province'=>'湖北','name'=>'盛天','network'=>'网络 ','dept'=>'研发部');
echo json_encode($array);
echo "<hr/>";

$array = array(array('id'=>1,'title'=>'武汉'),array('id'=>2,'title'=>'盛天'),array('id'=>3,'title'=>'研发'));
echo json_encode($array);
echo "<hr/>";

$array = array(0=>array('id'=>1,'title'=>'武汉'),2=>array('id'=>2,'title'=>'盛天'),3=>array('id'=>3,'title'=>'研发'));
echo json_encode($array);

用json_encode来生成json的时候如果生成的数组那么数组的key必须从0开始依次递增的,不然生成的json就是对象了

解决方案:

1、在服务器端:

     第一种:可以用拼接字符串的形势来生成

$array = array(0=>array('id'=>1,'title'=>'武汉'),2=>array('id'=>2,'title'=>'盛天'),3=>array('id'=>3,'title'=>'研发'));
$jsonStr="";
foreach ( $array as $val ){
    $jsonStr .= "{
        'id':'".$val['id']."',
        'title':'".$val['title']."'
    },";
}
$jsonStr = "[".substr($jsonStr, 0,-1)."]";
echo $jsonStr;

第二种:如果想得到的是数组的形势来就用array_merge要转换的数组进行排行一下就行了

$array = array(0=>'湖北',3=>'盛天',5=>'网络 ',6=>'研发部');
echo json_encode($array);
echo "<hr/>";
echo "利用array_merge函数重新对key进行排列:<br/>";
echo json_encode(array_merge($array));

2、在客户端

    在得到服务器端返回来的数据的时候,不要用length来得到,可以用for(var r in msg)来读取数组

$.ajax({
        url:"index.php",
        success:function(msg){
            eval("var msg="+msg);
            /*for(var i=0;i<msg.length;i++){
                alert(msg[i]['title']);
            }*/
            for(var r in msg){
                alert(msg[r]['title']);
            }
        }
    });

posted on 2012-08-29 18:21  kudosharry  阅读(322)  评论(0编辑  收藏  举报

导航