在PHP中访问和输出嵌套JSON值



我正在尝试访问我检索的JSON体中的一些嵌套值。

请求url如下:https://pilotapi01.telkom.co.za/gateway/serviceQualification/v1/46165547

返回以下JSON:

{
"id": "46165547",
"href": "/serviceQualificationRequest/46165547",
"interactionDate": "20220704 08:49:02",
"description": "OpenServe Service Qualification",
"eligibilityDate": "20220704 08:49:02",
"qualificationState": "Done",
"address": {
"id": "46165547",
"href": "/api/address/46165547",
"customerPointRegion": "None",
"localExchangeName": "None",
"localStationCode": "None",
"MEPOPRegion": "None",
"MEExchangeName": "None",
"DistanceCustomerToMetroMDF": "-1",
"DistanceCustomerToLocalMDF": "-1",
"DistanceLocalMDFtoMEMDF": "-1"
},
"addressDescription": {
"mduFlag": "NO",
"streetNr": "92",
"streetName": "MILLS",
"streetType": "ST",
"locality": "STRAND",
"city": "STRAND",
"stateOrProvince": "WESTERN CAPE",
"country": "South Africa"
},
"geoCode": {
"latitude": "-34.108223",
"longitude": "18.835977",
"geographicDatum": "WGS84"
},
"physicalTerminationPoint": [
{
"accessType": "SPACE"
},
{
"accessType": "DSL"
},
{
"accessType": "FIBRE"
}
],
"serviceQualificationItem": [
{
"service": {
"serviceCharacteristic": [
{
"name": "Description",
"value": "SPACE"
}
],
"serviceSpecification": {
"id": "OPENSERVE SPACE CONNECT",
"href": "https://connect.openserve.co.za/product/broadband/space-connect",
"serviceCategoryId": "SPACE",
"serviceSpecificationCharacteristic": [
{
"id": "GIS001",
"name": "upstreamSpeed",
"valueto": "50 Mbps"
},
{
"id": "GIS002",
"name": "downstreamSpeed",
"valueto": "50 Mbps"
}
]
}
},
"availability": "Available",
"serviceabilityDate": "20220704 08:49:02"
},
{
"service": {
"serviceCharacteristic": [
{
"name": "Description",
"value": "DSL"
}
],
"serviceSpecification": {
"id": "OPENSERVE COPPER CONNECT",
"href": "https://connect.openserve.co.za/product/broadband/copper-connect",
"serviceCategoryId": "DSL",
"serviceSpecificationCharacteristic": [
{
"id": "GIS001",
"name": "upstreamSpeed",
"valueto": "0.5 Mbps"
},
{
"id": "GIS002",
"name": "downstreamSpeed",
"valueto": "20 Mbps"
}
]
}
},
"availability": "available",
"serviceabilityDate": "20220704 08:49:02"
},
{
"service": {
"serviceCharacteristic": [
{
"name": "Description",
"value": "DSL"
}
],
"serviceSpecification": {
"id": "OPENSERVE PURE CONNECT",
"href": "https://connect.openserve.co.za/product/broadband/pure-connect",
"serviceCategoryId": "DSL",
"serviceSpecificationCharacteristic": [
{
"id": "GIS001",
"name": "upstreamSpeed",
"valueto": "0.5 Mbps"
},
{
"id": "GIS002",
"name": "downstreamSpeed",
"valueto": "20 Mbps"
}
]
}
},
"availability": "available",
"serviceabilityDate": "20220704 08:49:02"
},
{
"service": {
"serviceCharacteristic": [
{
"name": "Description",
"value": "FIBRE"
}
],
"serviceSpecification": {
"id": "OPENSERVE FIBRE CONNECT",
"href": "https://connect.openserve.co.za/product/broadband/fibre-connect",
"serviceCategoryId": "FIBRE",
"serviceSpecificationCharacteristic": [
{
"id": "GIS001",
"name": "upstreamSpeed",
"valueto": "250 Mbps"
},
{
"id": "GIS002",
"name": "downstreamSpeed",
"valueto": "500 Mbps"
}
]
}
},
"availability": "Unavailable"
},
{
"service": {
"serviceCharacteristic": [
{
"name": "Description",
"value": "FIBRE"
}
],
"serviceSpecification": {
"id": "OPENSERVE OFFICE CONNECT FIBRE",
"href": "https://connect.openserve.co.za/product/broadband/fibre-connect",
"serviceCategoryId": "FIBRE",
"serviceSpecificationCharacteristic": [
{
"id": "GIS001",
"name": "upstreamSpeed",
"valueto": "250 Mbps"
},
{
"id": "GIS002",
"name": "downstreamSpeed",
"valueto": "500 Mbps"
}
]
}
},
"availability": "Unavailable"
},
{
"service": {
"serviceCharacteristic": [
{
"name": "Description",
"value": "FIBRE"
}
],
"serviceSpecification": {
"id": "OPENSERVE INFRASTRUCTURE BROADBAND",
"href": "https://connect.openserve.co.za/product/broadband/fibre-connect",
"serviceCategoryId": "FIBRE",
"serviceSpecificationCharacteristic": [
{
"id": "GIS001",
"name": "upstreamSpeed",
"valueto": "250 Mbps"
},
{
"id": "GIS002",
"name": "downstreamSpeed",
"valueto": "500 Mbps"
}
]
}
},
"availability": "Unavailable"
}
]
}

我想访问serviceQualificationItem->serviceSpecification->serviceSpecificationCharacteristic因此,我可以在foreach循环中使用它们来输出如下示例:

// From previous request
$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 ) ) {
echo '<div class="output-wrapper">';
foreach( $package as $details ) {?>
<div class="package-box">
<div><b>ID: </b> <?php echo $details->serviceQualificationItem->serviceSpecification->serviceSpecificationCharacteristic->ID ?> </div>                
</div>
<?php }
echo '</div>';
}

为了遍历您所请求的内容,所需的代码如下:

$request2 = wp_remote_get( 'https://pilotapi01.telkom.co.za/gateway/serviceQualification/v1/46165547' );
$info     = wp_remote_retrieve_body( $request2 );
$package = json_decode( $info, true );
if ( ! empty( $package ) ) {
foreach ( $package["serviceQualificationItem"] as $serverQualificationItem ) {
if ( $serverQualificationItem["availability"] == "Available" ) { // Maybe you want to get only the available ones? because i noticed some are unavailable
foreach ( $serverQualificationItem["service"]["serviceSpecification"]["serviceSpecificationCharacteristic"] as $serviceSpecificationCharacteristic ) {
?>
<div class="package-box">
<div><b>ID: </b> <?php echo $serviceSpecificationCharacteristic->ID ?> </div>
</div>
<?php
}
}
}
}

由于您提供的链接是公开的(如果它包含敏感数据,请小心在这里发布),因此已经过测试并正常工作

我注意到有些服务"不可用"。还额外加了一个"if"你可能/可能不需要。这应该给你一个良好的开端,如果你需要修改它,只要小心嵌套键

最新更新