
本文详解如何在 php 中正确解析 api 返回的 json 格式数组,使用 json_decode() 和 array_column() 快速提取特定字段(如 msisdn),避免常见错误,并提供健壮、可复用的代码示例。
本文详解如何在 php 中正确解析 api 返回的 json 格式数组,使用 json_decode() 和 array_column() 快速提取特定字段(如 msisdn),避免常见错误,并提供健壮、可复用的代码示例。
API 响应中提供的数据是标准的 JSON 格式——一个包含多个对象的数组(即 JSON Array of Objects)。它不是纯 PHP 数组,也不是字符串或 XML,因此必须先通过 json_decode() 解析为 PHP 可操作的数据结构,才能安全访问其中的值。
✅ 正确解析步骤
-
获取原始 JSON 字符串(例如通过
file_get_contents()或cURL); -
解码为 PHP 数据结构:调用
json_decode($json, true)(第二个参数设为true可返回关联数组,更便于后续处理); -
提取目标字段:使用
array_column()一键提取所有对象中同名键(如'msisdn')的值,返回一维索引数组。
以下是一个完整、健壮的示例代码(含错误处理):
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
<?php // 1. 获取 API 响应(注意:实际使用时请确保 URL 可访问且认证有效)
$url = 'http://raemis:password@127.0.0.1/api/subscriber';
$json = @file_get_contents($url); // 使用 @ 抑制警告,建议改用 cURL + 异常处理
// 2. 检查获取是否成功
if ($json === false) {
die("❌ API 请求失败:无法连接到服务器或网络错误。");
}
// 3. 解析 JSON —— 关键:必须检查解码结果
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
die("❌ JSON 解析失败:". json_last_error_msg() . "(原始响应:". htmlspecialchars(substr($json, 0, 200)) ."...)");
}
// 4. 提取所有 'msisdn' 值(安全:即使 data 为空或非数组也返回空数组)
$msisdns = is_array($data) ? array_column($data, 'msisdn') : [];
// 5. 输出结果(示例)
echo "<h3>提取到的 MSISDN 列表:";
echo "
- ";
foreach ($msisdns as $msisdn) {
echo "
- " . htmlspecialchars($msisdn) . " "; } echo "
⚠️ 常见错误与注意事项
-
未解码直接访问:
$json['msisdn']会报错,因为$json是字符串,不是数组; -
忽略
json_decode()的返回类型:默认返回stdClass对象,需用$obj[0]->msisdn访问;加true参数更符合习惯; -
未检查
json_last_error():API 返回异常(如 500 错误页、超时 HTML)会导致json_decode()返回null,后续操作引发Warning: array_column() expects parameter 1 to be array; -
未验证输入结构:若 API 返回单个对象而非数组(如
{...}),array_column()将失效,建议先is_array($data)判断; - 安全性提醒:示例中硬编码密码存在风险,生产环境务必使用环境变量、配置文件或 OAuth 等安全认证方式,避免泄露凭证。
? 进阶技巧
- 若需按条件筛选(如只取
authorised == 1的msisdn),可用array_filter()配合array_column():$active = array_filter($data, fn($item) => $item['authorised'] ?? 0 === 1); $active_msisdns = array_column($active, 'msisdn');
- 如需提取多个字段(如
id,msisdn,name),可用array_map()构建新数组:$summary = array_map(fn($item) => [ 'id' => $item['id'] ?? null, 'msisdn' => $item['msisdn'] ?? '', 'name' => $item['name'] ?? '(未命名)' ], $data);
掌握 json_decode() 与 array_column() 的组合,是 PHP 处理 RESTful API 响应的基石技能。只要坚持“先解码、再校验、后操作”的原则,即可高效、安全地提取任意嵌套 JSON 中的目标数据。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










