首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自定义类的json_decode

自定义类的json_decode
EN

Stack Overflow用户
提问于 2011-03-23 04:59:07
回答 12查看 79.3K关注 0票数 96

是否可以将json字符串解码为stdClass以外的对象?

EN

回答 12

Stack Overflow用户

发布于 2014-01-27 22:49:20

我们构建了JsonMapper来自动将JSON对象映射到我们自己的模型类上。它可以很好地处理嵌套/子对象。

它只依赖于docblock类型信息进行映射,这是大多数类属性都有的:

代码语言:javascript
复制
<?php
$mapper = new JsonMapper();
$contactObject = $mapper->map(
    json_decode(file_get_contents('http://example.org/contact.json')),
    new Contact()
);
?>
票数 41
EN

Stack Overflow用户

发布于 2013-12-18 17:30:35

你可以做到这一点-这是一个杂乱无章,但完全有可能。当我们开始在couchbase中存储东西时,我们不得不这样做。

代码语言:javascript
复制
$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以外的嵌套对象

编辑:记住数据源,强烈建议您在没有非常仔细地分析风险的情况下不要对来自用户的不受信任的数据执行此操作。

票数 30
EN

Stack Overflow用户

发布于 2015-01-20 00:58:36

你可以使用Johannes Schmitt's Serializer library

代码语言:javascript
复制
$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$object = $serializer->deserialize($jsonData, 'MyNamespace\MyObject', 'json');

在最新版本的JMS序列化程序中,语法是:

代码语言:javascript
复制
$serializer = SerializerBuilder::create()->build();
$object = $serializer->deserialize($jsonData, MyObject::class, 'json');
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5397758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档