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

多维JSON数组数据提取求助:PHP无法获取嵌套数组内的数据

如何从嵌套JSON数组中提取PHP数据

兄弟,我太懂这种“明明看着简单却卡了一整天”的憋屈感了!别慌,咱们一步步拆解这个问题~

首先,先把你提供的JSON片段补全成一个可测试的完整版本(方便演示):

{
  "ordens_de_servico": [
    {
      "oser_numero_os": 23932944,
      "oser_nome_solicitante": "ED PI - CAMPO MAIOR",
      "oser_dt_abertura": "27/03/2018",
      "oser_pontos_refer_endereco": null,
      "oser_observacoes": "示例工单备注"
    }
  ]
}

核心思路:先转PHP结构,再访问嵌套元素

PHP处理JSON的核心是用json_decode()把JSON字符串转成PHP能识别的数组或对象,然后根据嵌套层级访问对应数据。下面给你两种最常用的处理方式:

方式1:转关联数组处理(更直观)

给json_decode()传第二个参数true,会把JSON转为关联数组,直接用键名访问:

// 假设你的原始JSON字符串存在$json变量中
$json = '{ "ordens_de_servico": [ { "oser_numero_os": 23932944, "oser_nome_solicitante": "ED PI - CAMPO MAIOR", "oser_dt_abertura": "27/03/2018", "oser_pontos_refer_endereco": null, "oser_observacoes": "示例工单备注" } ] }';

// 转为关联数组
$dados = json_decode($json, true);

// **重点**:ordens_de_servico是一个数组(里面可能有多个工单),所以要先取数组元素,再取字段
$numero_os = $dados['ordens_de_servico'][0]['oser_numero_os'];
$solicitante = $dados['ordens_de_servico'][0]['oser_nome_solicitante'];

// 输出测试
echo "工单编号:{$numero_os}\n";
echo "申请人:{$solicitante}";

方式2:转对象处理

如果习惯用对象语法,不传第二个参数(默认false)会转为stdClass对象,用->访问属性:

$json = '{ "ordens_de_servico": [ { "oser_numero_os": 23932944, "oser_nome_solicitante": "ED PI - CAMPO MAIOR", "oser_dt_abertura": "27/03/2018", "oser_pontos_refer_endereco": null, "oser_observacoes": "示例工单备注" } ] }';

// 转为对象
$dados = json_decode($json);

// **重点**:同样要注意ordens_de_servico是数组,用[0]取第一个工单
$numero_os = $dados->ordens_de_servico[0]->oser_numero_os;
$solicitante = $dados->ordens_de_servico[0]->oser_nome_solicitante;

echo "工单编号:{$numero_os}\n";
echo "申请人:{$solicitante}";

你可能踩过的坑

  • 忽略ordens_de_servico是数组:很多人会直接写$dados['ordens_de_servico']['oser_numero_os'],忘记它是包含多个工单的数组,必须加索引(比如[0])或者遍历。
  • JSON解析失败:如果你的JSON格式有问题(比如截断、引号不匹配),json_decode()会返回null。可以用下面的代码排查错误:
$dados = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON解析出错:" . json_last_error_msg();
}
  • 多个工单需要遍历:如果ordens_de_servico里有多个工单,用循环批量处理:
foreach ($dados['ordens_de_servico'] as $ordem) {
    echo "工单编号:{$ordem['oser_numero_os']},申请人:{$ordem['oser_nome_solicitante']}\n";
}

如果你的PHP尝试代码还有其他特殊情况,贴出来我再帮你排查!

内容的提问来源于stack exchange,提问作者Israyane Nayara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:57:45