解决方案 »

  1.   


    /** Json数据格式化 
    * @param  Mixed  $data   数据 
    * @param  String $indent 缩进字符,默认4个空格 
    * @return JSON 
    */  
    function jsonFormat($data, $indent=null){  
      
        // 对数组中每个元素递归进行urlencode操作,保护中文字符  
        array_walk_recursive($data, 'jsonFormatProtect');  
      
        // json encode  
        $data = json_encode($data);  
      
        // 将urlencode的内容进行urldecode  
        $data = urldecode($data);  
      
        // 缩进处理  
        $ret = '';  
        $pos = 0;  
        $length = strlen($data);  
        $indent = isset($indent)? $indent : '    ';  
        $newline = "\n";  
        $prevchar = '';  
        $outofquotes = true;  
      
        for($i=0; $i<=$length; $i++){  
      
            $char = substr($data, $i, 1);  
      
            if($char=='"' && $prevchar!='\\'){  
                $outofquotes = !$outofquotes;  
            }elseif(($char=='}' || $char==']') && $outofquotes){  
                $ret .= $newline;  
                $pos --;  
                for($j=0; $j<$pos; $j++){  
                    $ret .= $indent;  
                }  
            }  
      
            $ret .= $char;  
              
            if(($char==',' || $char=='{' || $char=='[') && $outofquotes){  
                $ret .= $newline;  
                if($char=='{' || $char=='['){  
                    $pos ++;  
                }  
      
                for($j=0; $j<$pos; $j++){  
                    $ret .= $indent;  
                }  
            }  
      
            $prevchar = $char;  
        }  
      
        return $ret;  
    }  
      
    /** 将数组元素进行urlencode 
    * @param String $val 
    */  
    function jsonFormatProtect(&$val){  
        if($val!==true && $val!==false && $val!==null){  
            $val = urlencode($val);  
        }  
    }  
      
    header('content-type:application/json;charset=utf8');  $arr = array(
        'aa' => array(
            array(
                'Id' => 0,
                'title' => '标题'
            ),
            array(
                'Id' => 1,
                'title' => '标题'
            ),
        ),
        'bb' => array(
            array(
                'Id' => 2,
                'title' => '标题'
            ),
            array(
                'Id' => 3,
                'title' => '标题'
            ),
        )
    );echo jsonFormat($arr);
    {
        "aa":[
            {
                "Id":"0",
                "title":"标题"
            },
            {
                "Id":"1",
                "title":"标题"
            }
        ],
        "bb":[
            {
                "Id":"2",
                "title":"标题"
            },
            {
                "Id":"3",
                "title":"标题"
            }
        ]
    }
      

  2.   

    json_encode多维的数组就产生嵌套的 json
      

  3.   

    如果不需要显示缩进及中文utf8编码,可以直接用json_encode 多维数组实现。