PHP访问并输出嵌套JSON内serviceQualificationItem字段值的方法
代码失效核心原因
你写的代码拿不到值,是三个核心问题导致的:
- 调用
json_decode时传入了第二个参数true,返回结果是关联数组结构,后续却用对象操作符->访问字段,语法不匹配 - 遍历起点错误:直接循环整个
$package根节点,拿到的都是id、href、地址这类顶层字段,根本没有定位到目标的serviceQualificationItem数组 - 嵌套路径缺漏+数组未二次遍历:
serviceQualificationItem的每个子项下,先嵌套了service层才到serviceSpecification,且最终的serviceSpecificationCharacteristic本身是存储上下行速率的数组结构,不是单值字段,无法直接读取ID。
正确实现代码
// 从上一步逻辑获取地址ID $addressID = $address->id; $request2 = wp_remote_get( 'https://pilotapi01.telkom.co.za/gateway/serviceQualification/v1/'.$addressID ); $info = wp_remote_retrieve_body( $request2 ); $package = json_decode( $info , true ); if( !empty( $package['serviceQualificationItem'] ) ) { echo '<div class="output-wrapper">'; // 直接遍历目标服务套餐数组 foreach( $package['serviceQualificationItem'] as $item ) { // 字段判空,避免接口返回异常时抛出警告 if( empty($item['service']['serviceSpecification']) ) continue; $spec = $item['service']['serviceSpecification']; ?> <div class="package-box"> <div><b>套餐ID:</b><?php echo $spec['id']; ?></div> <div><b>套餐分类:</b><?php echo $spec['serviceCategoryId']; ?></div> <div><b>可用状态:</b><?php echo $item['availability']; ?></div> <div class="speed-info"> <b>速率参数:</b> <ul> <?php // 二次遍历速率特征字段 foreach( $spec['serviceSpecificationCharacteristic'] as $char ) { echo '<li>'.$char['name'].': '.$char['valueto'].'</li>'; } ?> </ul> </div> </div> <?php } echo '</div>'; }
实现说明
- 全程用数组下标
[]访问字段,和json_decode(...,true)返回的关联数组结构完全匹配 - 直接定位到
$package['serviceQualificationItem']作为遍历起点,跳过无关的顶层字段 - 每一层嵌套都加了空值判断,避免接口返回字段缺失时抛出PHP错误
- 对
serviceSpecificationCharacteristic做二次遍历,完整输出上下行速率等所有特征值 - 补全了路径中遗漏的
service层级,和接口返回的JSON结构完全对应
内容的提问来源于stack exchange,提问作者Demonix
相关产品推荐
相关产品推荐

