JSON

JSON函数

函数 描述
json_encode 对变量进行JSON编码
json_decode 对JSON格式的字符串进行解码,转为PHP变量
json_last_error 返回最后发生错误

json_encode

PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE

语法

1
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, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR

    实例

    1
    2
    3
    <?php
    $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
    echo json_encode($arr);
    运行结果
    1
    {"a":1,"b":2,"c":3,"d":4,"e":5}

如何将PHP对象转换为JSON格式

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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);

运行结果
1
{"name":"sachin","hobbies":"sports","birthdate":"08\/05\/1974 12:20:03 pm"}

还可以使用JSON_UNESCAPED_UNICODE选项

1
2
3
4
5
<?php
$arr = array('runoob' => '菜鸟教程', 'taobao' => '淘宝网');
echo json_encode($arr); // 编码中文
echo PHP_EOL; // 换行符
echo json_encode($arr, JSON_UNESCAPED_UNICODE); // 不编码中文

运行结果
1
2
{"runoob":"\u83dc\u9e1f\u6559\u7a0b","taobao":"\u6dd8\u5b9d\u7f51"}
{"runoob":"菜鸟教程","taobao":"淘宝网"}

这个例子就可以看到区别了,如果不加选项的话则会将中文也转译为编码

json_decode

json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量

语法

1
mixed json_decode ($json_string [,$assoc = false [, $depth = 512 [, $options = 0 ]]])

参数

  • json_string 待解码的JSON字符串,必须是UTF-8编码数据
  • assoc 当该参数为TRUE时,将返回数组,FALSE时返回对象
  • depth 整数类型的参数,它指定递归深度
  • options 二进制掩码,目前只支持JSON_BIGINT_AS_STRING

实现

1
2
3
4
5
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)
}

总结

1.JSON转PHP使用json_decode

2.PHP转JSON使用json_encode

3.json_decode的assoc参数为true时,就返回数组,否则就是对象

4.json_encode定义的类型是string;json_decode定义的类型是mixed