PHP JSON
json是什么?
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,主要用于傳送數據。
JSON 可以將 JavaScript 對象中表示的一組數據轉換為字符串,然后就可以在函數之間輕松地傳遞這個字符串,或者在異步應用程序中將字符串從 Web 客戶機傳遞給服務器端程序。這個字符串看起來有點兒古怪,但是 JavaScript 很容易解釋它,而且 JSON 可以表示比"名稱 / 值對"更復雜的結構。例如,可以表示數組和復雜的對象,而不僅僅是鍵和值的簡單列表。
本章節(jié)作為了解,不用重點掌握。
環(huán)境配置
在 php5.2.0 及以上版本已經內置 JSON 擴展。
JSON 函數
json_encode
PHP json_encode() 用于對變量進行 JSON 編碼,該函數如果執(zhí)行成功返回 JSON 數據,否則返回 FALSE 。
語法
string json_encode ( $value [, $options = 0 ] )
參數
·???????? value: 要編碼的值。該函數只對 UTF-8 編碼的數據有效。
·???????? options:由以下常量組成的二進制掩碼:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT
實例
以下實例演示了如何將 PHP 數組轉換為 JSON 格式數據:
<?php $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); echo json_encode($arr); ?>
以上代碼執(zhí)行結果為:
{"a":1,"b":2,"c":3,"d":4,"e":5}
以下實例演示了如何將 PHP 對象轉換為 JSON 格式數據:
<?php class Emp { public $name = ""; public $hobbies = ""; public $birthdate = ""; } $e = new Emp(); $e->name = "sachin"; $e->hobbies = "sports"; $e->birthdate = date('m/d/Y h:i:s a', "8/5/1974 12:20:03 p"); $e->birthdate = date('m/d/Y h:i:s a', strtotime("8/5/1974 12:20:03")); echo json_encode($e); ?>
以上代碼執(zhí)行結果為:
{"name":"sachin","hobbies":"sports","birthdate":"08/05/1974 12:20:03 pm"}
json_decode
PHP json_decode() 函數用于對 JSON 格式的字符串進行解碼,并轉換為 PHP 變量。
語法
mixed json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
參數
·???????? json_string: 待解碼的 JSON 字符串,必須是 UTF-8 編碼數據
·???????? assoc: 當該參數為 TRUE 時,將返回數組,FALSE 時返回對象。
·???????? depth: 整數類型的參數,它指定遞歸深度
·???????? options: 二進制掩碼,目前只支持 JSON_BIGINT_AS_STRING 。
實例
以下實例演示了如何解碼 JSON 數據:
<?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?>
以上代碼執(zhí)行結果為:
object(stdClass)#1 (5) {
??? ["a"] => int(1)
??? ["b"] => int(2)
??? ["c"] => int(3)
??? ["d"] => int(4)
??? ["e"] => int(5)
}
?
array(5) {
??? ["a"] => int(1)
??? ["b"] => int(2)
??? ["c"] => int(3)
??? ["d"] => int(4)
??? ["e"] => int(5)
}
?
PHP中Json格式規(guī)則
?
- 并列的數據之間用逗號(”, “)分隔?
- 映射用冒號(”: “)表示?
- 并列數據的集合(數組)用方括號(“[]”)表示?
- 映射的集合(對象)用大括號(”{}”)表示
?
下面這句話:?
“北京市的面積為16800平方公里,常住人口1600萬人。上海市的面積為6400平方公里,常住人口1800萬?!?
寫成json格式就是這樣:
[
{"城市":"北京","面積":16800,"人口":1600},
{"城市":"上海","面積":6400,"人口":1800}
]
PHP中操作json的函數
加密 ? ? ?json_encode
解密 ? ? ?json_decode
一維數組到json數據格式的轉換
<?php $arr_1 = array(); $arr_1['username'] = 'lisi'; $arr_1['age'] = 20; echo json_encode($arr_1);//{"username":"lisi","age":20} ?>
多維數組到json數據格式的轉換
<?php $arr_2 = array(); // 三維數組 $arr_2['member']['lisi']['job'] = "worker"; $arr_2['member']['lisi']['age'] = 30; $arr_2['member']['wangwu']['job'] = "student"; $arr_2['member']['wangwu']['age'] = 10; echo json_encode($arr_2); //{"member":{"lisi":{"job":"worker","age":30},"wangwu":{"job":"student","age":10}}} ?>
?
對象到json數據格式的轉換
對象轉化為json數據時,只轉換公有變量,私有變量不轉換
<?php class Person{ public $name = "public name"; protected $ptName = "protected name"; private $pName = "private name"; public function sayName(){ return $this->name; } } $person1 = new Person(); echo json_encode($person1);//{"name":"public name"} ?>
?
轉換json數據格式到對象類型
<?php $jsonStr = '{"key1":"value1","key2":"value2"}'; print_r(json_decode($jsonStr,false));//stdClass Object ( [key1] => value1 [key2] => value2 ?>
轉換json數據格式到數組類型
<?php $jsonStr = '{"key1":"value1","key2":"value2"}'; print_r(json_decode($jsonStr,true));//Array ( [key1] => value1 [key2] => value2 ) ?>
json_decode($jsonStr,true); 第二個參數如果是true ,那么結果會被轉換為array類型,參數默認為false,默認轉換為對象