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
相关产品推荐
相关产品推荐

