phputil/json

一个JSON编码和解码器,也可以转换具有私有或受保护的属性的PHP对象。

1.3.1 2018-01-27 16:57 UTC

This package is auto-updated.

Last update: 2024-09-23 04:08:46 UTC


README

一个JSON编码和解码器,也可以转换具有私有或受保护的属性的PHP对象。

Build Status

我们使用 语义版本控制。查看 我们的发布版本

安装

composer require phputil/json

仅依赖于 phputil\RTTI。需要 PHP >= 5.4

示例 1

转换具有 privateprotected 属性的对象。

<?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" }

许可证

MIT (c) Thiago Delgado Pinto