s-mcdonald/jason

Jason (JSON) 是一个PHP库,允许您使用属性序列化类,使用构建器构建JSON结构,等等。

1.2.0 2023-05-29 14:12 UTC

README

Source Source

使用属性序列化类。

文档

用法

使用属性进行序列化/编码

class User implements JsonSerializable
{
    #[Property('userName')]
    public string $name;

    #[Property]
    public array $phoneNumbers;

    #[Property('creditCard')]
    public function getCreditCard(): int
    {
        $this->creditCard = $credit;
    }
}

现在使用Json的staticJsonSerializer进行序列化

echo Json::serialize($user);
// or use the JsonSerializer
$serializer = new JsonSerializer();
echo $serializer->serialize($user);

// Produces
{
    "userName": "Foo",
    "phoneNumbers": [
        "044455444",
        "244755465"
    ],
    "creditCard": 54454.5,
}

JsonBuilder

echo Json::createJsonBuilder()
        ->addNumericProperty('id', 11)
        ->addStringProperty('title', "Perfume Oil")
        ->addNumericProperty('rating', 4.26)
        ->addNumericProperty('stock', 65)
        ->addObjectProperty(
            'thumbnail',
            Json::createJsonBuilder()
                ->addStringProperty("url", "https://i.dummyjson.com/data/products/11/thumbnail.jpg")
                ->addStringProperty("title", "thumbnail.jpg")
        )
        ->addArrayProperty("images", [
            "https://i.dummyjson.com/data/products/11/1.jpg",
            "https://i.dummyjson.com/data/products/11/2.jpg"
        ])
;

将创建以下内容

{
    "id": 11,
    "title": "Perfume Oil",
    "rating": 4.26,
    "stock": 65,
    "thumbnail": {
    "url": "https://i.dummyjson.com/data/products/11/thumbnail.jpg",
          "title": "thumbnail.jpg"
    },
    "images": [
          "https://i.dummyjson.com/data/products/11/1.jpg",
          "https://i.dummyjson.com/data/products/11/2.jpg"
     ]
}

JsonAsserter

JsonAsserter::assertStringIsValidJson('{"foo":"bar"}');

Json::createFromArray

$json = Json::createFromArray(["foo" => "baz"]);
echo $json; // {"foo":"baz"}
echo $json->toString(); // {"foo":"baz"}
echo $json->toPretty(); 
// {
//   "foo":"baz"
// }

Json::createFromUrl

$json = Json::createFromUrl("http://some-domain.com/json-endpoint.json");
echo $json->toString(); // {"foo":"baz"}

Json::createFromFile

$json = Json::createFromFile("/path/on/server.json");
echo $json->toPretty(); 
// {
//   "foo":"baz"
// }

Json::createFromStringable

$json = Json::createFromStringable('{"foo":"baz"}');
echo $json->toString(); // {"foo":"baz"}

Json::mergeCombine

$json = Json::mergeCombine('{"foo":"baz"}', '{"buz":"qux"}');
echo $json->toString(); // {"foo":"baz","buz":"qux"}

Json::convertJsonToArray

$json = Json::convertJsonToArray('{"foo":"baz","buz":"qux"}');
echo $json->toString(); // ["foo" => "baz","buz" => "qux"}

Json::convertFromJsonToObject

$json = Json::convertFromJsonToObject('{"foo":"baz","buz":"qux"}');
echo $json->toString(); // instance of JsonSerializable::class with values

除了使用Json实体外,还有一个独立的编码器/解码器可以使用。

JsonEncoder

$encoded = (new JsonEncoder())->encode($someValue)->getBody();

JsonDecoder

$decoded = (new JsonDecoder())->encode($someValue)->getBody();

Json的递归迭代

foreach($json->toIterator() as $value) {
    // will return all property values no matter how deep
    // and nested in the Json structure.
}

安装

通过Composer。在项目的根目录中运行以下命令。

composer require s-mcdonald/jason

依赖

  • Php 8.0

许可

Jason遵循MIT许可证的条款(有关详细信息,请参阅LICENSE文件)。