如何操作PHP stdClass输出以得到指定结构的JSON格式
PHP对象数组重构适配JSON接口格式
问题背景
从数据库查询得到的数据集为对象格式,执行json_encode($myObj)的原始输出:
[ { "entry": "10", "displayid": "100", "folder": "1" }, { "entry": "20", "displayid": "200", "folder": "2" }, { "entry": "30", "displayid": "300", "folder": "3" } ]
需要重构为接口要求的如下JSON结构:
[ { "file": { "entry": 10, "displayid": 100 }, "folder": 1 }, { "file": { "entry": 20, "displayid": 200 }, "folder": 2 }, { "file": { "entry": 30, "displayid": 300 }, "folder": 3 } ]
自行编写的遍历代码输出不符合预期,原代码:
foreach ($result as $res) { $ho = new stdClass(); $ho->file = [$ho->entry = $res->entry, $ho->displayid = $res->displayid]; $ho->folder = $res->folder; }
错误点说明
- 循环内每次创建的
$ho对象没有存入统一的结果集,循环结束后仅会保留最后一次循环生成的对象,无法得到完整的数组结构 file字段被赋值为索引数组,而非要求的嵌套对象;且entry、displayid属性被错误挂载到外层对象,没有放在file子结构内- 原始字段值为字符串类型,目标结构要求为数值类型,未做类型转换
修复代码
基于stdClass的实现
$transformed = []; foreach ($result as $item) { $row = new stdClass(); // 构造file嵌套对象 $file = new stdClass(); $file->entry = (int)$item->entry; $file->displayid = (int)$item->displayid; $row->file = $file; $row->folder = (int)$item->folder; // 推入结果数组 $transformed[] = $row; } // 输出符合要求的JSON echo json_encode($transformed);
基于数组的简化实现
json_encode处理关联数组时会自动转为JSON对象,写法更简洁:
$transformed = []; foreach ($result as $item) { $transformed[] = [ 'file' => [ 'entry' => (int)$item->entry, 'displayid' => (int)$item->displayid ], 'folder' => (int)$item->folder ]; } echo json_encode($transformed);
内容的提问来源于stack exchange,提问作者Pelin
相关产品推荐
相关产品推荐

