是否可以将json字符串解码为stdClass以外的对象?
发布于 2014-01-27 22:49:20
我们构建了JsonMapper来自动将JSON对象映射到我们自己的模型类上。它可以很好地处理嵌套/子对象。
它只依赖于docblock类型信息进行映射,这是大多数类属性都有的:
<?php
$mapper = new JsonMapper();
$contactObject = $mapper->map(
json_decode(file_get_contents('http://example.org/contact.json')),
new Contact()
);
?>
发布于 2013-12-18 17:30:35
你可以做到这一点-这是一个杂乱无章,但完全有可能。当我们开始在couchbase中存储东西时,我们不得不这样做。
$stdobj = json_decode($json_encoded_myClassInstance); //JSON to stdClass
$temp = serialize($stdobj); //stdClass to serialized
// Now we reach in and change the class of the serialized object
$temp = preg_replace('@^O:8:"stdClass":@','O:7:"MyClass":',$temp);
// Unserialize and walk away like nothing happend
$myClassInstance = unserialize($temp); // Presto a php Class
在我们的基准测试中,这比尝试迭代所有类变量要快得多。
警告:不适用于stdClass以外的嵌套对象
编辑:记住数据源,强烈建议您在没有非常仔细地分析风险的情况下不要对来自用户的不受信任的数据执行此操作。
发布于 2015-01-20 00:58:36
你可以使用Johannes Schmitt's Serializer library。
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$object = $serializer->deserialize($jsonData, 'MyNamespace\MyObject', 'json');
在最新版本的JMS序列化程序中,语法是:
$serializer = SerializerBuilder::create()->build();
$object = $serializer->deserialize($jsonData, MyObject::class, 'json');
https://stackoverflow.com/questions/5397758
复制相似问题