background image

四、json_decode()

该函数用于将 json 文本转换为相应的 PHP 数据结构。下面是一个例子:

38 $json = '{"foo": 12345}';  
39 $obj = json_decode($json);  
40 print $obj->{'foo'}; // 12345 

通常情况下,json_decode()总是返回一个 PHP 对象,而不是数组。比如:

41 $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';  
42 var_dump(json_decode($json)); 

结果就是生成一个 PHP 对象:

43 object(stdClass)#1 (5) {  
44 ["a"] => int(1)  
45 ["b"] => int(2)  
46 ["c"] => int(3)  
47 ["d"] => int(4)  
48 ["e"] => int(5)  
49 } 

如果想要强制生成 PHP 关联数组,json_decode()需要加一个参数 true:

50 $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';  
51 var_dump(json_decode($json),true); 

结果就生成了一个关联数组:

52 array(5) {  
53 ["a"] => int(1)  
54 ["b"] => int(2)  
55 ["c"] => int(3)  
56 ["d"] => int(4)  
57 ["e"] => int(5)  
58 } 

五、json_decode()的常见错误

下面三种 json 写法都是错的,你能看出错在哪里吗?

59 $bad_json = "{ 'bar': 'baz' }";  
60 $bad_json = '{ bar: "baz" }';  
61 $bad_json = '{ "bar": "baz", }'; 

对这三个字符串执行 json_decode()都将返回 null,并且报错。

第一个的错误是,json 的分隔符(delimiter)只允许使用双引号,不能使用单引号。第二
个的错误是,json 名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。第