目前比较流行的两种数据交换格式,分别是XML和JSON。XML具有清晰的DOM结构和树形层级关系,每个属性都含有开始和结束标签,但这也意味着文件的体积可能更大;JSON采用key-value键值对的方式组织数据,额外字符较少,因此文件体积小,而且JSON更符合主流语言如JavaScript和PHP等语言中对象的数据解析习惯,于是JSON大行其道。
总的来说ML比较适合于标记文档,而JSON却更适于进行数据交换处理。
最近在写APP 应用的数据接口,需要接受客户端传来的JSON数据,并在服务器端将处理好的数组会对象以JSON格式发至客户端。可见JOSN在数据交换中的重要,于是,便有了此文,作为记录。
从 PHP 5.2 开始,PHP原生内置了json_encode()和json_decode()函数,前者用于编码,后者用于解码。
JSON函数如下:
JSON函数 | 描述 |
---|---|
json_decode | 对 JSON 格式的字符串进行解码。 |
json_encode | 对变量进行 JSON 编码。 |
json_last_error_msg | 返回上一次发生的错误。 |
json_last_error | 返回最后发生的错误。 |
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
<?php $json = '{"a":1,"b":2,"c":3}'; var_dump(json_decode($json)); ?>
输出如下:
object(stdClass)#1 (3) { ["a"]=>int(1) ["b"]=>int(2) ["c"]=>int(3) }
<?php $json = '{"a":1,"b":2,"c":3}'; var_dump(json_decode($json, true)); ?> `
输出如下:
array(3) { ["a"]=>int(1) ["b"]=>int(2) ["c"]=>int(3) }
string json_encode ( mixed $value [, int $options = 0 ] )
<?php $arr = array ('a'=>1,'b'=>2,'c'=>3); echo json_encode($arr); ?>
输出如下:
{"a":1,"b":2,"c":3}
json_decode()会将索引数组(只保存值)输出的字符串转为数组格式,而将关联数组(保存键值对)输出的字符串转为对象格式。
当数组为索引数组时,输出的字符串为数组格式:
$arr = array('a', 'b', 'c'); echo json_encode($arr);
输出结果为:
["a", "b", "c"]
而当数组为关联数组时,输出的字符串为对象格式:
$arr = array('1'=>'a', '2'=>'b', '3'=>'c'); echo json_encode($arr);
输出结果为:
{"1":"a","2":"b","3":"c"}
如果需要将索引数组在转化为json字符串时,强制输出的字符串为对象格式,方法如下:
json_encode( (object)$arr );
或者:
json_encode ( $arr, JSON_FORCE_OBJECT );
语法:
int json_last_error ( void )
如果有,返回 JSON 编码解码时最后发生的错误。
参考链接:《 json_last_error 》
语法:
string json_last_error_msg ( void )