phputil / json
一个JSON编码和解码器,也可以转换具有私有或受保护的属性的PHP对象。
1.3.1
2018-01-27 16:57 UTC
Requires
- php: >=5.3
- phputil/rtti: >=1.4
README
一个JSON编码和解码器,也可以转换具有私有或受保护的属性的PHP对象。
类
安装
composer require phputil/json
仅依赖于 phputil\RTTI。需要 PHP >= 5.4
。
示例 1
转换具有 private
或 protected
属性的对象。
<?php require_once 'vendor/autoload.php'; use \phputil\JSON; class Foo { private $a = 1; protected $b = 2; public $c = 3; function getA() { return $this->a; } function getB() { return $this->b; } function getC() { return $this->c; } } echo JSON::encode( new Foo() ); // { "a": 1, "b": 2, "c": 3 } ?>
示例 2
转换一个 动态对象。
$obj = new stdClass(); $obj->name = 'Suzan'; $obj->age = 21; echo JSON::encode( $obj ); // { "name": "Suzan", "age": 21 }
示例 3
将 动态对象 的数组转换为JSON并再次转换回来。
$obj1 = new stdClass(); $obj1->name = 'Bob'; $obj2 = new stdClass(); $obj2->name = 'Suzan'; $obj2->age = 21; $json = JSON::encode( array( $obj1, $obj2 ) ); echo $json; // [ { "name": "Bob" }, { "name": "Suzan", "age": 21 } ] $array = JSON::decode( $json ); var_dump( $array ); // array with the two PHP dynamic objects
示例 4
转换使用 __call
魔术方法的类的属性。
class Foo { private $a = 1; protected $b = 2; public $c = 3; function __call( $name, $args ) { if ( 'getA' === $name ) { return $this->a; } if ( 'getB' === $name ) { return $this->b; } if ( 'getC' === $name ) { return $this->c; } } } echo JSON::encode( new Foo() ); // { "a": 1, "b": 2, "c": 3 }
示例 5
忽略对象属性或数组值中的 NULL
值。
$arr = array( 'name' => 'Bob', 'phone' => null, 'age' => 21 ); // phone is null // true as the third argument makes encode() to ignore null values echo JSON::encode( $arr, 'get', true ); // { "name": "Bob", "age": 21 }
示例 6
使用值转换器。值转换器是一个函数,用于正确转换特定类型的值。例如,假设您需要将 DateTime
类型的值转换为 年-月-日
格式。您只需要使用静态方法 addConversion
注册类型和转换其值的函数。
JSON::addConversion( 'DateTime', function( $value ) { return $value->format( 'Y-m-d' ); // year-month-day } ); $obj = new stdClass(); $obj->user = 'bob'; $obj->birthdate = new DateTime( "12/31/1980" ); // month/day/year echo JSON::encode( $obj ); // { "user": "bob", "birthdate": "1980-12-31" }