PHP 使用 JSON 函数 json_encode() json_decode()

仅为学习和使用过程中的记录,参考自网络信息

从5.2版本开始,PHP原生提供 json_encode()json_decode() 函数,前者用于编码,后者用于解码。

一、json_encode()

该函数主要用来将数组和对象,转换为json格式。

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>'result');
echo json_encode($arr);

结果

{"a":1,"b":2,"c":3,"d":4,"e":"result"}
// 声明一个空对象
$obj=(object)array();
// 或者
$obj=(object)null;
// 把数组转换为对象:
// $arr=array(‘a’,’b’);
// $empty_object=(object)$arr;

$obj->body           = 'another post';
$obj->id             = 21;
$obj->approved       = true;
$obj->favorite_count = 1;
$obj->status         = NULL;
echo json_encode($obj);

结果

{"body":"another post","id":21,"approved":true,"favorite_count":1,"status":null}

json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。

索引数组和关联数组

PHP支持两种数组,一种是只保存”值”(value)的索引数组(indexed array),另一种是保存”名值对”(name/value)的关联数组(associative array)。
由于javascript不支持关联数组,所以json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。

索引数组:

$arr = Array('one', 'two', 'three');
echo json_encode($arr);

结果

["one","two","three"]

关联数组:

$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');
echo json_encode($arr);

结果

扫描二维码关注公众号,回复: 2114429 查看本文章
{"1":"one","2":"two","3":"three"}

数据格式”[ ]”(数组)和”{ }”(对象)的区别,将”索引数组”强制转化成”对象”,可以这样写

json_encode( (object)$arr );
// 或者
json_encode ( $arr, JSON_FORCE_OBJECT );//PHP 5.3.0 起生效。

下面的常量可以用作 json_encode() 的 第二个参数使用。
**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)
使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。
**JSON_NUMERIC_CHECK
** (integer)
将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。
**JSON_BIGINT_AS_STRING
** (integer)
将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。
**JSON_PRETTY_PRINT
** (integer)
用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。
**JSON_UNESCAPED_SLASHES
** (integer)
不要编码 /。 自 PHP 5.4.0 起生效。
**JSON_UNESCAPED_UNICODE
** (integer)
以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。

二、json_decode()

将json文本转换为相应的PHP数据结构,即PHP对象或数组。通常情况下,json_decode()总是返回一个PHP对象,而不是数组,如果想要强制生成PHP关联数组,json_decode()需要加一个参数 true 如

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
$obj = json_decode($json);
var_dump($obj);
//object(stdClass)#1 (5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5) }
$obj = json_decode($json,true);
var_dump($obj);
//array(5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5) }

猜你喜欢

转载自blog.csdn.net/weicy1510/article/details/80599026