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

如何用PHP解析带Authorization认证的JSON接口并渲染为HTML表格/列表

问题原因

你代码的核心问题是JSON处理逻辑搞反了:

  • 调用接口返回的$data本身就是JSON格式字符串,需要用json_decode()将其转为PHP可操作的数组/对象
  • 你错误调用了json_encode(),相当于把原JSON字符串又做了一次编码,最终得到的是字符串类型,自然无法用数组键名读取Vehicles字段内容

修正后的完整代码

<?php
$url = 'https://gw.bilinfo.net/listingapi/api/export';

// 身份认证信息
$auth = base64_encode("demo:ocfB6XzF73");

// 构造HTTP请求上下文
$context = stream_context_create([
    'http' => ['header' => "Authorization: Basic $auth"]
]);

// 请求数据,添加错误判断
$data = file_get_contents($url, false, $context);
if ($data === false) {
    die('接口请求失败,请检查网络或认证信息');
}

// 把JSON字符串转为关联数组,第二个参数传true才会返回数组格式
$vehiclesData = json_decode($data, true);
// 判断JSON解析是否成功,以及Vehicles字段是否存在
if (json_last_error() !== JSON_ERROR_NONE || !isset($vehiclesData['Vehicles'])) {
    die('JSON数据解析失败,或返回数据格式不符合预期');
}

// 构造表格
$temp = "<table border='1'>"; // 加border方便查看效果,不需要可以删掉

// 表头
$temp .= "<tr><th>Bilmodel</th>";
$temp .= "<th>Motor</th>";
$temp .= "<th>Drivmiddel</th></tr>";

// 遍历车辆数据生成表格行,用foreach比for更稳妥
foreach ($vehiclesData['Vehicles'] as $vehicle) {
    $temp .= "<tr>";
    $temp .= "<td>" . htmlspecialchars($vehicle['Model'] ?? '') . "</td>";
    $temp .= "<td>" . htmlspecialchars($vehicle['Motor'] ?? '') . "</td>";
    $temp .= "<td>" . htmlspecialchars($vehicle['Propellant'] ?? '') . "</td>";
    $temp .= "</tr>";
}

$temp .= "</table>";

echo $temp;
?>

额外优化说明

  • 新增了接口请求、JSON解析的错误校验,避免出现无意义的PHP警告
  • 替换for循环为foreach遍历,无需手动计算数组长度,逻辑更简洁
  • 输出字段时加了htmlspecialchars()转义,避免原数据里的特殊字符破坏HTML结构,同时用??语法处理字段不存在的情况,防止报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:39:02