json_decode到自定义类
是否可以将 json 字符串解码为 stdClass 以外的对象?
不会自动发生。但你可以用老式的路线来做。
$data = json_decode($json, true);
$class = new Whatever();
foreach ($data as $key => $value) $class->{$key} = $value;
或者,您可以使其更加自动化:
class Whatever {
    public function set($data) {
        foreach ($data AS $key => $value) $this->{$key} = $value;
    }
}
$class = new Whatever();
$class->set($data);
编辑:变得更花哨一点:
class JSONObject {
    public function __construct($json = false) {
        if ($json) $this->set(json_decode($json, true));
    }
    public function set($data) {
        foreach ($data AS $key => $value) {
            if (is_array($value)) {
                $sub = new JSONObject;
                $sub->set($value);
                $value = $sub;
            }
            $this->{$key} = $value;
        }
    }
}
// These next steps aren't necessary. I'm just prepping test data.
$data = array(
    "this" => "that",
    "what" => "who",
    "how" => "dy",
    "multi" => array(
        "more" => "stuff"
    )
);
$jsonString = json_encode($data);
// Here's the sweetness.
$class = new JSONObject($jsonString);
print_r($class);
						我们构建了JsonMapper来自动将JSON对象映射到我们自己的模型类上。它适用于嵌套/子对象。
它仅依赖于文档块类型信息进行映射,大多数类属性无论如何都具有这些信息:
<?php
$mapper = new JsonMapper();
$contactObject = $mapper->map(
    json_decode(file_get_contents('http://example.org/contact.json')),
    new Contact()
);
?>