You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何操作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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 07:33:19