在PHP语言中使用JSON和将json还原成数组的方法

preview
需积分: 0 0 下载量 17 浏览量 更新于2020-10-21 收藏 58KB PDF 举报
在本文中,我们将探讨在PHP中使用JSON数据格式的方法,以及如何将JSON数据还原为数组或对象。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。PHP从5.2版本起原生支持处理JSON数据的两个重要函数:json_encode() 和 json_decode()。 一、json_encode()函数 json_encode()函数用于将PHP数组或对象编码成JSON格式的字符串。我们来看一个数组编码的例子: ```php $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); echo json_encode($arr); ``` 输出将会是: ``` {"a":1,"b":2,"c":3,"d":4,"e":5} ``` 数组中的每个键值对被转换成了JSON对象的属性。当编码对象时,输出形式类似: ```php $obj = new stdClass(); $obj->body = 'anotherpost'; $obj->id = 21; $obj->approved = true; $obj->favorite_count = 1; $obj->status = NULL; echo json_encode($obj); ``` 输出: ``` { "body": "anotherpost", "id": 21, "approved": true, "favorite_count": 1, "status": null } ``` 这里,$obj对象的所有公共属性都被编码进了JSON对象中。 当处理索引数组和关联数组时,json_encode()会将索引数组转换为JSON数组格式,关联数组则转换为JSON对象格式。例如: ```php $arr = array('one', 'two', 'three'); // 索引数组 echo json_encode($arr); ``` 输出: ``` ["one","two","three"] ``` 而关联数组: ```php $arr = array('1' => 'one', '2' => 'two', '3' => 'three'); // 关联数组 echo json_encode($arr); ``` 输出: ``` {"1":"one","2":"two","3":"three"} ``` 需要注意的是,json_encode()函数处理的参数必须是UTF-8编码的字符。如果参数使用了中文的GB2312编码或外文的ISO-8859-1编码,会出现错误或返回null值。若要处理这些编码的字符串,需要先将其转换为UTF-8编码。 此外,json_encode()默认只将索引数组转换为数组格式,关联数组转换为对象格式。如果需要将关联数组转换为JSON对象,可以通过设置JSON_FORCE_OBJECT选项实现。 二、类(class)的转换 json_encode()也可以处理PHP类的对象。类的私有属性(private)和受保护的属性(protected)不会被编码,只有公共属性(public)会被包含在JSON对象中。例如: ```php class Foo { const ERROR_CODE = '404'; public $public_ex = 'this is public'; private $private_ex = 'this is private!'; protected $protected_ex = 'this should be protected'; public function getErrorCode() { return self::ERROR_CODE; } } $foo = new Foo; $foo_json = json_encode($foo); echo $foo_json; ``` 输出结果为: ``` {"public_ex":"this is public"} ``` 只有public属性会被编码进JSON。 三、json_decode()函数 json_decode()函数用于将JSON格式的字符串解码成PHP数组或对象。默认情况下,json_decode()将JSON字符串解码成PHP对象,但可以通过设置第二个参数为true将结果转换为数组。例如: ```php $json = '{"foo":12345}'; $obj = json_decode($json); echo $obj->{'foo'}; // 输出12345 $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); ``` 输出结果为: ``` object(stdClass)#1(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } ``` 若想要结果为关联数组: ```php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json, true)); ``` 输出结果为关联数组: ``` array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } ``` 当需要强制将JSON解码为关联数组时,可以使用json_decode()的第二个参数设置为true。 在使用json_decode()时,如果JSON字符串格式不正确,函数可能返回null。因此在处理返回的数据前应该进行null值的检查。 json_encode() 和 json_decode() 是在PHP中处理JSON数据的核心函数。通过这两个函数,PHP开发者可以轻松地在JSON数据和PHP数组或对象之间进行转换,从而实现数据的格式化传输和处理。在实际开发中,正确地使用这两个函数能有效地帮助我们构建前后端分离的现代Web应用。