JSON函數json

【前言】

json是一種輕量級的數據交換格式,在現在的web開發當中,簡介和清晰的層次結構使得json成為理想的數據交換語言。

在php當中,就經常需要使用json_encode這個函數來對變量進行JSON編碼,而在編碼完成之後,需要對一些特殊字符進行相應的處理(例如/,’,”等),也會在編碼中文字符的時候遇到一些問題。這篇博客就對json_encode()做一個比較詳細的說明。


【json_encode簡介】

json_encode — 對變量進行 JSON 編碼

string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )

[value]:待編碼的 value ,除了resource類型之外,可以為任何數據類型。所有字符串數據的編碼必須是 UTF-8。

[options]: 由以下常量組成的二進制掩碼: JSON_HEX_QUOT等。

具體參見:JSON常量

[depth]: 設置最大深度。 必須大於0。

成功則返回 JSON 編碼的 string 或者在失敗時返回 FALSE


【json_encode詳解】

1、特殊字符(, ‘, “, &)的處理

$a = array('', "'bar'", '"baz"', '&blong&');

/*Normal*/

echo json_encode($a)."
";

/*JSON_HEX_TAG:將所有的< 和 > 轉換成\\u003C和\\u003E*/

echo json_encode($a[0], JSON_HEX_TAG)."
";

/*JSON_HEX_APOS:將所有的'轉換成\\u0027*/

echo json_encode($a[1], JSON_HEX_APOS)."
";

/*JSON_HEX_QUOT:將所有的"轉換成\\u0022*/

echo json_encode($a[2], JSON_HEX_QUOT)."
";

/*JSON_HEX_AMP:將所有的&轉換成\\u0026*/

echo json_encode($a[3], JSON_HEX_AMP)."
";

?>

輸出:

["","'bar'",""baz"","&blong&"]

"\\u003Cfoo\\u003E"

"\\u0027bar\\u0027"

"\\u0022baz\\u0022"

"\\u0026blong\\u0026"

2、使一個非關聯數組輸出一個類而非數組

/*JSON_FORCE_OBJECT:使一個非關聯數組輸出一個類而非數組*/

$b = array();

echo json_encode($b)."
";

echo json_encode($b, JSON_FORCE_OBJECT)."
";

$c = array(array(1,2,3));

echo json_encode($c)."
";

echo json_encode($c, JSON_FORCE_OBJECT)."
";

$d = array('foo' => 'bar', 'baz' => 'long');

echo json_encode($d)."
";

echo json_encode($d, JSON_FORCE_OBJECT)."
";

?>

輸出:

[[1,2,3]]

{"0":{"0":1,"1":2,"2":3}}

{"foo":"bar","baz":"long"}

{"foo":"bar","baz":"long"}

3、將數字字符串編碼成數字

/*JOSN_NUMERIC_CHECK:將所有的數字字符串編碼成數字*/

$e = array('12345', '789');

echo json_encode($e)."
";

echo json_encode($e, JSON_NUMERIC_CHECK);

?>

輸出:

["12345","789"]

[12345,789]

4、特殊字符’/’的處理(不要編碼’/’)

/*JSON_UNESCAPED_SLASHES:不要編碼/*/

$f = array('/abcd');

echo json_encode($f)."
";

echo json_encode($f, JSON_UNESCAPED_SLASHES)."
";

?>

輸出:

["\/abcd"]

["/abcd"]

5、確保浮點數被編碼為浮點數

/*JSON_PRESERVE_ZERO_FRACTION:確保浮點數被編碼為浮點數*/

echo json_encode(12.0)."
";

echo json_encode(12.0, JSON_PRESERVE_ZERO_FRACTION)."
";

?>

輸出:

12

12.0

6、中文字符編碼(以字面編碼多字節Unicode字符)

$g = array('你好!', '世界');

/*JSON_UNESCAPED_UNICODE:以字面編碼多字節Unicode字符(默認是編程成\\uXXXX)*/

echo json_encode($g)."
";

echo json_encode($g, JSON_UNESCAPED_UNICODE)."
";

?>

輸出:

["\\u4f60\\u597d\\uff01","\\u4e16\\u754c"]

["你好!","世界"]


分享到:


相關文章: