如何正确解析嵌套 JSON 响应并提取指定字段(如 USD 汇率)

10次阅读

如何正确解析嵌套 JSON 响应并提取指定字段(如 USD 汇率)

本文详解如何使用 php + curl 正确获取并解码嵌套 json api 响应,定位并提取深层键(如 `data.rates.usd`),避免常见的“undefined index”错误。

在调用类似 coinbase 的汇率 API 时,返回的 jsON 数据往往具有多层嵌套结构。例如以下响应:

{"data":{"currency":"TRX","rates":{"AED":"0.22938983227","USD":"0.06245299"}}}

初学者常误以为解码后可直接通过 $json[‘USD’] 访问美元汇率,但实际结构是:
$json → [‘data’] → [‘rates’] → [‘USD’]
因此,直接访问 $json[‘USD’] 必然触发 Notice: Undefined index: USD 错误

✅ 正确解析步骤

  1. 发起 curl 请求并启用错误检测(推荐):

    $url = "https://api.coinbase.com/v2/exchange-rates?currency=TRX"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_ssl_VERIFYPEER, false); // 生产环境请务必启用证书验证 curl_setopt($ch, CURLOPT_TIMEOUT, 10);  $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);  if ($result === false || $httpCode !== 200) {     throw new RuntimeException("cURL failed: " . curl_error($ch) . " (HTTP $httpCode)"); }
  2. 安全解码 JSON 并验证结构

    $json = json_decode($result, true); if (json_last_error() !== JSON_ERROR_NONE) {     throw new RuntimeException("Invalid JSON response"); }  // ✅ 正确路径:逐层访问嵌套数组 $usdRate = $json['data']['rates']['USD'] ?? NULL;  if ($usdRate === null) {     throw new RuntimeException("Expected 'data.rates.USD' not found in response"); }  echo "TRX to USD rate: " . $usdRate; // 输出:TRX to USD rate: 0.06245299

? 调试技巧:可视化 JSON 结构

开发阶段强烈建议使用 print_r() 或 var_dump() 查看完整结构:

echo "
"; print_r($json); echo "

";

或借助在线工具(如 JsonFormatter)格式化原始响应,快速确认键路径。

⚠️ 注意事项

  • 永远不要跳过错误检查:curl_exec() 可能返回 false;json_decode() 失败时返回 null。
  • 使用空合并运算符 ?? 提供默认值,避免未定义索引警告。
  • 生产环境禁用 CURLOPT_SSL_VERIFYPEER => false,应配置 CA 证书(如 curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem'))。
  • 若需健壮性,可封装为可复用函数:
    function getNestedValue($array, $path, $default = null) {     foreach (explode('.', $path) as $key) {         if (!is_array($array) || !isset($array[$key])) return $default;         $array = $array[$key];     }     return $array; } // 使用:getNestedValue($json, 'data.rates.USD')

掌握嵌套 JSON 的路径访问逻辑,是 php 接口开发的基础能力——关键在于「先看清结构,再精准取值」。

text=ZqhQzanResources