1.json_decode()
json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool $assoc ] ) 接受一个 JSON 格式的字符串并且把它转换为 PHP 变量 参数 json 待解码的 json string 格式的字符串。 assoc 当该参数为 TRUE 时,将返回 array 而非 object 。返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.范例
Example #1 json_decode() 的例子上例将输出:
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)}
$data='[{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""},{"Name":"a1","Number":"123","Contno":"000","QQNo":""}]';echo json_decode($data);
结果为:
Array ( [0] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )
可以看出经过json_decode()编译出来的是对象,现在输出json_decode($data,true)试下
echo json_decode($data,true);
结果:
Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )
可以看出 json_decode($data,true)输出的一个关联数组,由此可知json_decode($data)输出的是对象,而json_decode("$arr",true)是把它强制生成PHP关联数组.
2.json_encode() json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_encode — 对变量进行 JSON 编码 Report a bug 说明 string json_encode ( mixed $value [, int $options = 0 ] ) 返回 value 值的 JSON 形式 Report a bug 参数 value 待编码的 value ,除了resource 类型之外,可以为任何数据类型 该函数只能接受 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, JSON_UNESCAPED_UNICODE.Report a bug 返回值
编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。 Report a bug 更新日志 版本 说明 5.4.0 options 参数增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。 5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK。 5.3.0 增加 options 参数.Report a bug 范例
Example #1 A json_encode() 的例子1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);echo json_encode($arr);?>
以上例程会输出:
{"a":1,"b":2,"c":3,"d":4,"e":5}
Example #2 json_encode() 函数中 options 参数的用法
',"'bar'",'"baz"','&blong&', "\xc3\xa9");echo "Normal: ", json_encode($a), "\n";echo "Tags: ", json_encode($a, JSON_HEX_TAG), "\n";echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n";echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n";echo "Amp: ", json_encode($a, JSON_HEX_AMP), "\n";echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";$b = array();echo "Empty array output as array: ", json_encode($b), "\n";echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";$c = array(array(1,2,3));echo "Non-associative array output as array: ", json_encode($c), "\n";echo "Non-associative array output as object: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n";$d = array('foo' => 'bar', 'baz' => 'long');echo "Associative array always output as object: ", json_encode($d), "\n";echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";?>
以上例程会输出:
Normal: ["","'bar'","\"baz\"","&blong&","\u00e9"]Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"]Apos: [" ","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]Quot: [" ","'bar'","\u0022baz\u0022","&blong&","\u00e9"]Amp: [" ","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"]Unicode: [" ","'bar'","\"baz\"","&blong&","é"]All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]Empty array output as array: []Empty array output as object: {}Non-associative array output as array: [[1,2,3]]Non-associative array output as object: {"0":{"0":1,"1":2,"2":3}}Associative array always output as object: {"foo":"bar","baz":"long"}Associative array always output as object: {"foo":"bar","baz":"long"}
Example #3 连续与非连续数组示例
"foo", 2=>"bar", 3=>"baz", 4=>"blong");var_dump($nonsequential,json_encode($nonsequential));echo PHP_EOL."删除一个连续数组值的方式产生的非连续数组".PHP_EOL;unset($sequential[1]);var_dump($sequential,json_encode($sequential));?>
以上例程会输出:
连续数组array(4) {[0]=>string(3) "foo"[1]=>string(3) "bar"[2]=>string(3) "baz"[3]=>string(5) "blong"}string(27) "["foo","bar","baz","blong"]"非连续数组array(4) {[1]=>string(3) "foo"[2]=>string(3) "bar"[3]=>string(3) "baz"[4]=>string(5) "blong"}string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"删除一个连续数组值的方式产生的非连续数组array(3) {[0]=>string(3) "foo"[2]=>string(3) "baz"[3]=>string(5) "blong"}string(33) "{"0":"foo","2":"baz","3":"blong"}"
$obj->Name= 'a1';$obj->Number ='123';$obj->Contno= '000';echo json_encode($obj);
结果为:
{"Name":"a1","Number":"123","Contno":"000"}