把Array转换成JSON格式的方法——PHP中的json_encode()函数
在PHP中,有一个非常方便的函数可以把数组数据转换成JSON格式,那就是json_encode()函数。该函数将数组数据编码成JSON字符串。
使用json_encode()函数非常简单,只需要传入一个数组参数即可。例如,我们可以创建一个包含一系列数据的关联数组,并使用json_encode()函数将其转换成JSON格式的字符串:
$data = array(
'name' => 'John',
'age' => 25,
'email' => 'john@example.com'
);
$json = json_encode($data);
echo $json;
在上面的代码中,首先我们定义了一个包含姓名、年龄、邮箱的关联数组 $data。然后使用json_encode()函数将该数组转换成JSON字符串,并将该字符串输出到浏览器上。输出结果如下:
{"name":"John","age":25,"email":"john@example.com"}
可以看到,数组中的每个元素都被编码成了一个JSON对象,该对象由一对大括号括起来,多个对象之间使用逗号分隔。
除了关联数组,我们也可以使用普通数组和多维数组作为json_encode()函数的参数。例如,以下代码将一个普通数组转换成JSON字符串:
$data = array('one', 'two', 'three');
$json = json_encode($data);
echo $json;
输出结果如下:
["one","two","three"]
可以看到,普通数组被编码成了一个由一对方括号括起来的JSON数组,多个值之间使用逗号分隔。
多维数组也可以进行编码,仅需将多维数组作为json_encode()函数的参数即可。例如:
$data = array(
array(
'name' => 'John',
'age' => 25,
'email' => 'john@example.com'
),
array(
'name' => 'Mary',
'age' => 30,
'email' => 'mary@example.com'
),
array(
'name' => 'Tom',
'age' => 35,
'email' => 'tom@example.com'
)
);
$json = json_encode($data);
echo $json;
输出结果如下:
[
{"name":"John","age":25,"email":"john@example.com"},
{"name":"Mary","age":30,"email":"mary@example.com"},
{"name":"Tom","age":35,"email":"tom@example.com"}
]
可以看到,多维数组被编码成了一个由一对方括号括起来的JSON数组,数组中的每个元素又是一个JSON对象。
需要注意的是,PHP中的json_encode()函数只支持UTF-8编码的字符串。如果传入的数组中包含其它编码的字符串,该函数会将其转换成UTF-8编码。同时,该函数也不支持序列化 PHP 特有的类型,如资源类型、闭包类型等。
除了json_encode()函数以外,PHP也提供了一个用于解码JSON字符串的函数——json_decode()。该函数将一个JSON字符串解码成PHP数据类型。例如:
$json = '{"name":"John","age":25,"email":"john@example.com"}';
$data = json_decode($json);
print_r($data);
输出结果如下:
stdClass Object
(
[name] => John
[age] => 25
[email] => john@example.com
)
可以看到,json_decode()函数将JSON字符串解码成了一个PHP对象。如果我们想把该对象转换成一个关联数组,可以使用第二个参数来指定返回值类型,例如:
$json = '{"name":"John","age":25,"email":"john@example.com"}';
$data = json_decode($json, true);
print_r($data);
输出结果如下:
Array
(
[name] => John
[age] => 25
[email] => john@example.com
)
可以看到,加上第二个参数true之后,json_decode()函数返回了一个关联数组。需要注意的是,json_decode()函数在默认情况下返回的是一个PHP对象,而不是关联数组。如果不指定第二个参数,我们访问该对象时需要使用箭头运算符->,例如$data->name。
