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

PHP使用file_get_contents解析嵌套JSON,如何提取price字段?

解决PHP解析嵌套JSON提取price字段返回null的问题

你直接遍历顶层对象拿price返回null,核心问题是没对应JSON的实际嵌套层级——price字段不在顶层结构里,得顺着JSON的层级逐层访问。

先假设你提供的JSON结构类似这样(如果实际结构不同,对应调整层级即可):

示例JSON结构:

{
  "code": 200,
  "data": {
    "items": [
      {
        "product_id": "1001",
        "info": {
          "price": 29.9,
          "stock": 50
        }
      },
      {
        "product_id": "1002",
        "info": {
          "price": 49.9,
          "stock": 30
        }
      }
    ]
  }
}

正确实现步骤

1. 先处理API请求与JSON解析的错误

先确保请求成功、JSON解析正常,避免因请求失败或格式错误导致后续问题:

$apiUrl = '你的API地址';
$jsonData = file_get_contents($apiUrl);

// 检查API请求是否成功
if ($jsonData === false) {
    die('API请求失败');
}

// 解析JSON,默认返回对象;传true可返回关联数组
$parsedData = json_decode($jsonData);
// 关联数组模式:$parsedData = json_decode($jsonData, true);

// 检查JSON解析是否失败
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解析失败:' . json_last_error_msg());
}

2. 按嵌套层级提取price字段

根据JSON的实际结构,逐层访问到price字段,同时做存在性检查避免报错:

方式一:对象模式(默认解析结果)
// 确认商品列表层级存在
if (isset($parsedData->data->items) && is_array($parsedData->data->items)) {
    foreach ($parsedData->data->items as $item) {
        // 检查price字段是否存在
        if (isset($item->info->price)) {
            echo '商品价格:' . $item->info->price . '<br>';
        } else {
            echo '该商品无价格信息<br>';
        }
    }
} else {
    echo '未找到商品数据';
}
方式二:关联数组模式
$parsedData = json_decode($jsonData, true);

if (isset($parsedData['data']['items']) && is_array($parsedData['data']['items'])) {
    foreach ($parsedData['data']['items'] as $item) {
        if (isset($item['info']['price'])) {
            echo '商品价格:' . $item['info']['price'] . '<br>';
        } else {
            echo '该商品无价格信息<br>';
        }
    }
} else {
    echo '未找到商品数据';
}

关键注意事项

  • 先打印var_dump($parsedData)查看解析后的完整结构,确认price的实际位置,不要凭直觉写层级。
  • 必须用isset()(数组)或property_exists()(对象)检查字段是否存在,避免Undefined属性/偏移量错误。
  • 如果API返回错误状态码(如404、500),file_get_contents可能返回无效内容,建议用CURL替代,更灵活处理请求头和状态码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:53:14