首页 > 解决方案 > 如何从 PHP 中的嵌套 json 对象下方访问地址元素

问题描述

我想从以 json 格式存储在 PHP 中的地址元素访问addressLine,adminDistrict

{
  "authenticationResultCode": "ValidCredentials",
  "brandLogoUri": "http://dev.virtualearth.net/Branding/logo_powered_by.png",
  "copyright": "Copyright © 2019 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.",
  "resourceSets": [
    {
      "estimatedTotal": 1,
      "resources": [
        {
          "__type": "Location:http://schemas.microsoft.com/search/local/ws/rest/v1",
          "bbox": [
            40.75594078242932,
            -74.0022632570927,
            40.76366621757067,
            -73.98866508290732
          ],
          "name": "471 W 42nd St, New York, NY 10036",
          "point": {
            "type": "Point",
            "coordinates": [
              40.7598035,
              -73.99546417
            ]
          },
          "address": {
            "addressLine": "471 W 42nd St",
            "adminDistrict": "NY",
            "adminDistrict2": "New York Co.",
            "countryRegion": "United States",
            "formattedAddress": "471 W 42nd St, New York, NY 10036",
            "intersection": {
              "baseStreet": "W 42nd St",
              "secondaryStreet1": "10th Ave",
              "intersectionType": "Near",
              "displayName": "W 42nd St and 10th Ave"
            },
            "locality": "New York",
            "postalCode": "10036"
          },
          "confidence": "High",
          "entityType": "Address",
          "geocodePoints": [
            {
              "type": "Point",
              "coordinates": [
                40.7598035,
                -73.99546417
              ],
              "calculationMethod": "Rooftop",
              "usageTypes": [
                "Display"
              ]
            }
          ],
          "matchCodes": [
            "Good"
          ]
        }
      ]
    }
  ],
  "statusCode": 200,
  "statusDescription": "OK",
  "traceId": "d551494203554f058cd3e2e72582f7b1|HK20271557|7.7.0.0|HK01EAP000001D0"
}

{
  "authenticationResultCode": "ValidCredentials",
  "brandLogoUri": "http://dev.virtualearth.net/Branding/logo_powered_by.png",
  "copyright": "Copyright © 2019 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.",
  "resourceSets": [
    {
      "estimatedTotal": 1,
      "resources": [
        {
          "__type": "Location:http://schemas.microsoft.com/search/local/ws/rest/v1",
          "bbox": [
            40.75594078242932,
            -74.0022632570927,
            40.76366621757067,
            -73.98866508290732
          ],
          "name": "471 W 42nd St, New York, NY 10036",
          "point": {
            "type": "Point",
            "coordinates": [
              40.7598035,
              -73.99546417
            ]
          },
          "address": {
            "addressLine": "471 W 42nd St",
            "adminDistrict": "NY",
            "adminDistrict2": "New York Co.",
            "countryRegion": "United States",
            "formattedAddress": "471 W 42nd St, New York, NY 10036",
            "intersection": {
              "baseStreet": "W 42nd St",
              "secondaryStreet1": "10th Ave",
              "intersectionType": "Near",
              "displayName": "W 42nd St and 10th Ave"
            },
            "locality": "New York",
            "postalCode": "10036"
          },
          "confidence": "High",
          "entityType": "Address",
          "geocodePoints": [
            {
              "type": "Point",
              "coordinates": [
                40.7598035,
                -73.99546417
              ],
              "calculationMethod": "Rooftop",
              "usageTypes": [
                "Display"
              ]
            }
          ],
          "matchCodes": [
            "Good"
          ]
        }
      ]
    }
  ],
  "statusCode": 200,
  "statusDescription": "OK",
  "traceId": "d551494203554f058cd3e2e72582f7b1|HK20271557|7.7.0.0|HK01EAP000001D0"
}

标签: phpjson

解决方案


<?php
/*
if Array of JSON Object is returned then
Use following
*/
$json = '[{
  "authenticationResultCode": "ValidCredentials",
  "brandLogoUri": "http://dev.virtualearth.net/Branding/logo_powered_by.png",
  "copyright": "Copyright © 2019 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.",
  "resourceSets": [
    {
      "estimatedTotal": 1,
      "resources": [
        {
          "__type": "Location:http://schemas.microsoft.com/search/local/ws/rest/v1",
          "bbox": [
            40.75594078242932,
            -74.0022632570927,
            40.76366621757067,
            -73.98866508290732
          ],
          "name": "471 W 42nd St, New York, NY 10036",
          "point": {
            "type": "Point",
            "coordinates": [
              40.7598035,
              -73.99546417
            ]
          },
          "address": {
            "addressLine": "471 W 42nd St",
            "adminDistrict": "NY",
            "adminDistrict2": "New York Co.",
            "countryRegion": "United States",
            "formattedAddress": "471 W 42nd St, New York, NY 10036",
            "intersection": {
              "baseStreet": "W 42nd St",
              "secondaryStreet1": "10th Ave",
              "intersectionType": "Near",
              "displayName": "W 42nd St and 10th Ave"
            },
            "locality": "New York",
            "postalCode": "10036"
          },
          "confidence": "High",
          "entityType": "Address",
          "geocodePoints": [
            {
              "type": "Point",
              "coordinates": [
                40.7598035,
                -73.99546417
              ],
              "calculationMethod": "Rooftop",
              "usageTypes": [
                "Display"
              ]
            }
          ],
          "matchCodes": [
            "Good"
          ]
        }
      ]
    }
  ],
  "statusCode": 200,
  "statusDescription": "OK",
  "traceId": "d551494203554f058cd3e2e72582f7b1|HK20271557|7.7.0.0|HK01EAP000001D0"
},
{
  "authenticationResultCode": "ValidCredentials",
  "brandLogoUri": "http://dev.virtualearth.net/Branding/logo_powered_by.png",
  "copyright": "Copyright © 2019 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.",
  "resourceSets": [
    {
      "estimatedTotal": 1,
      "resources": [
        {
          "__type": "Location:http://schemas.microsoft.com/search/local/ws/rest/v1",
          "bbox": [
            40.75594078242932,
            -74.0022632570927,
            40.76366621757067,
            -73.98866508290732
          ],
          "name": "471 W 42nd St, New York, NY 10036",
          "point": {
            "type": "Point",
            "coordinates": [
              40.7598035,
              -73.99546417
            ]
          },
          "address": {
            "addressLine": "471 W 42nd St",
            "adminDistrict": "NY",
            "adminDistrict2": "New York Co.",
            "countryRegion": "United States",
            "formattedAddress": "471 W 42nd St, New York, NY 10036",
            "intersection": {
              "baseStreet": "W 42nd St",
              "secondaryStreet1": "10th Ave",
              "intersectionType": "Near",
              "displayName": "W 42nd St and 10th Ave"
            },
            "locality": "New York",
            "postalCode": "10036"
          },
          "confidence": "High",
          "entityType": "Address",
          "geocodePoints": [
            {
              "type": "Point",
              "coordinates": [
                40.7598035,
                -73.99546417
              ],
              "calculationMethod": "Rooftop",
              "usageTypes": [
                "Display"
              ]
            }
          ],
          "matchCodes": [
            "Good"
          ]
        }
      ]
    }
  ],
  "statusCode": 200,
  "statusDescription": "OK",
  "traceId": "d551494203554f058cd3e2e72582f7b1|HK20271557|7.7.0.0|HK01EAP000001D0"
}]';

$array = json_decode($json);
foreach($array as $sub_array) {
    echo $sub_array->resourceSets[0]->resources[0]->address->addressLine . "<br/>";
    echo $sub_array->resourceSets[0]->resources[0]->address->adminDistrict . "<br/>";
}

/*
And if single JSON Object is returned then
Use following
*/
$json = '{
"authenticationResultCode": "ValidCredentials",
"brandLogoUri": "http://dev.virtualearth.net/Branding/logo_powered_by.png",
"copyright": "Copyright © 2019 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.",
"resourceSets": [
{
  "estimatedTotal": 1,
  "resources": [
    {
      "__type": "Location:http://schemas.microsoft.com/search/local/ws/rest/v1",
      "bbox": [
        40.75594078242932,
        -74.0022632570927,
        40.76366621757067,
        -73.98866508290732
      ],
      "name": "471 W 42nd St, New York, NY 10036",
      "point": {
        "type": "Point",
        "coordinates": [
          40.7598035,
          -73.99546417
        ]
      },
      "address": {
        "addressLine": "471 W 42nd St",
        "adminDistrict": "NY",
        "adminDistrict2": "New York Co.",
        "countryRegion": "United States",
        "formattedAddress": "471 W 42nd St, New York, NY 10036",
        "intersection": {
          "baseStreet": "W 42nd St",
          "secondaryStreet1": "10th Ave",
          "intersectionType": "Near",
          "displayName": "W 42nd St and 10th Ave"
        },
        "locality": "New York",
        "postalCode": "10036"
      },
      "confidence": "High",
      "entityType": "Address",
      "geocodePoints": [
        {
          "type": "Point",
          "coordinates": [
            40.7598035,
            -73.99546417
          ],
          "calculationMethod": "Rooftop",
          "usageTypes": [
            "Display"
          ]
        }
      ],
      "matchCodes": [
        "Good"
      ]
    }
  ]
}
],
"statusCode": 200,
"statusDescription": "OK",
"traceId": "d551494203554f058cd3e2e72582f7b1|HK20271557|7.7.0.0|HK01EAP000001D0"
}';
$JsonData = json_decode($json); 
echo $JsonData->resourceSets[0]->resources[0]->address->addressLine . "<br/>";
echo $JsonData->resourceSets[0]->resources[0]->address->adminDistrict . "<br/>";

推荐阅读