ホームページ  >  記事  >  バックエンド開発  >  PHP json データをフォーマットする方法についての簡単な説明

PHP json データをフォーマットする方法についての簡単な説明

PHPz
PHPz転載
2016-05-16 08:59:575364ブラウズ

この記事では、php の json データを整形する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHP json データをフォーマットする方法についての簡単な説明

php の json_encode は、配列を json 形式の文字列に変換できます。文字列はインデントされず、中国語の文字は \u975a\u4ed4 などの unicode エンコードに変換されます。人にとって読むのは難しい。

このメソッドは json_encode に基づいて再び美化されます。人々がコンテンツを読みやすくします。

1. json_encode 出力を使用します

<?php  
  
header('content-type:application/json;charset=utf8');  
  
$arr = array(  
    'status' => true,  
    'errmsg' => '',  
    'member' =>array(  
        array(  
            'name' => '张三',  
            'gender' => '男'  
        ),  
        array(  
            'name' => '李四',  
            'gender' => '女'  
        )  
    )  
);  
  
echo json_encode($arr);  
  
?>

出力:

{"status":true,"errmsg":"","member":[{"name":"\u674e\u900d\u9065","gender":"\u7537"},{"name":"\u8d75\u7075\u513f","gender":"\u5973"}]}  

この形式は人々にとって非常に難しいことがわかります。読む。

2. jsonformat 出力を使用する

<?php  
  
/** 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(  
    'status' => true,  
    'errmsg' => '',  
    'member' =>array(  
        array(  
            'name' => '张三',  
            'gender' => '男'  
        ),  
        array(  
            'name' => '李四',  
            'gender' => '女'  
        )  
    )  
);  
  
echo jsonformat($arr);  
  
?>  

出力:

{  
    "status":true,  
    "errmsg":"",  
    "member":[  
        {  
            "name":"张三",  
            "gender":"男"  
        },  
        {  
            "name":"李四",  
            "gender":"女"  
        }  
    ]  
}

php5.4 以降、json_encode には json_unescaped_unicode、json_pretty_print などが追加されます。定数パラメータ。中国語の表示と書式設定がより便利になりました。

header('content-type:application/json;charset=utf8');    
    
$arr = array(    
    'status' => true,    
    'errmsg' => '',    
    'member' =>array(    
        array(    
            'name' => '张三',    
            'gender' => '男'    
        ),    
        array(    
            'name' => '李四',    
            'gender' => '女'    
        )    
    )    
);    
    
echo json_encode($arr, json_unescaped_unicode|json_pretty_print);  

出力:

{  
    "status": true,  
    "errmsg": "",  
    "member": [  
        {  
            "name": "张三",  
            "gender": "男"  
        },  
        {  
            "name": "李四",  
            "gender": "女"  
        }  
    ]  
}

json 定数パラメータの説明: 次の定数は、json_last_error() によって返されるエラーのタイプを表します。

json_error_none (integer)

エラーは発生しませんでした。 php 5.3.0 以降で有効になります。

json_error_depth (integer)

最大スタック深さに達しました。 php 5.3.0 以降で有効になります。

json_error_state_mismatch (integer)

アンダーフローまたはパターンの不一致が発生しました。 php 5.3.0 以降で有効になります。

json_error_ctrl_char (integer)

制御文字が間違っています。エンコーディングが間違っている可能性があります。 php 5.3.0 以降で有効になります。

json_error_syntax (integer)

構文エラー。 php 5.3.0 以降で有効になります。

json_error_utf8 (integer)

例外的な utf-8 文字。エンコードが間違っている可能性があります。この定数は、php 5.3.1 以降で使用できます。

次の定数は、json_encode() の form オプションと組み合わせて使用​​できます。

json_hex_tag (integer)

はすべて \u003c と \u003e に変換されます。 php 5.3.0 以降で有効になります。

json_hex_amp (integer)

すべての & は \u0026 に変換されます。 php 5.3.0 以降で有効になります。

json_hex_apos (integer)

すべての ' は \u0027 に変換されます。 php 5.3.0 以降で有効になります。

json_hex_quot (integer)

すべての " は \u0022 に変換されます。php 5.3.0 以降で有効です。

json_force_object (integer)

非連想配列が配列の代わりにクラス (オブジェクト) を出力します。配列: 空で受信側がオブジェクトを必要とする場合に特に便利です。php 5.3.0 以降で有効です。

json_numeric_check (integer)

すべての数値文字列を数値にエンコードします。php 5.3.3 以降で有効です。

json_bigint_as_string (integer)

大きな数値を元の文字の元の値にエンコードします。php 5.4.0 以降で有効です。

json_pretty_print (integer)

返されたデータを空白文字でフォーマットします。php 5.4.0 以降 php 5.4.0 以降で有効です。 .

json_unescaped_slashes (integer)

/ をエンコードしないでください。php 5.4.0 以降で有効です。

JSON_UNESCAPED_UNICODE (integer)

マルチバイト unicode 文字をリテラルにエンコードします (デフォルトでは \uxxxx をエンコードします)。php 5.4 以降から有効です。 .0.

推奨学習: 「php ビデオ チュートリアル」 p>

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。