How to loop through JSON array using PHP

大憨熊 提交于 2019-11-29 11:58:19

问题


My PHP code:

$obj = json_decode($data);
print $obj->{'name'};

While it works for non-arrays, I can't for the life of me figure out how to print all the values within the "Reviews" Array.

What I would like to do is to loop through this response, probably with forreach(), resulting in a list containing the rating and excerpt for each review in the response.

Any guidance / direction is greatly appreciated..

Below is the JSON I'm working with. (it is the response from the Yelp API).

{
    "is_claimed": true,
    "rating": 4.5,
    "mobile_url": "http://m.yelp.com/biz/economy-paint-and-collision-riverside",
    "rating_img_url": "http://s3-media2.ak.yelpcdn.com/assets/2/www/img/99493c12711e/ico/stars/v1/stars_4_half.png",
    "review_count": 19,
    "name": "Economy Paint & Collision",
    "snippet_image_url": "http://s3-media3.ak.yelpcdn.com/photo/ZOzoahw0Go_DEPLvxCaP_Q/ms.jpg",
    "rating_img_url_small": "http://s3-media2.ak.yelpcdn.com/assets/2/www/img/a5221e66bc70/ico/stars/v1/stars_small_4_half.png",
    "url": "http://www.yelp.com/biz/economy-paint-and-collision-riverside",
    "reviews": [
        {
            "rating": 3,
            "excerpt": "The Good:\nDennis quoted me a price over the phone about 1 month before I took my wifes 2010 Escalade in for repairs and when I took it in he gave me the...",
            "time_created": 1357010247,
            "rating_image_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/34bc8086841c/ico/stars/v1/stars_3.png",
            "rating_image_small_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/902abeed0983/ico/stars/v1/stars_small_3.png",
            "user": {
                "image_url": "http://s3-media3.ak.yelpcdn.com/photo/mIsU7ugYd88lLA-XL2q1Cg/ms.jpg",
                "id": "V9MDZvEBv-tBTF4YIoc7mg",
                "name": "Sydney H."
            },
            "rating_image_large_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/e8b5b79d37ed/ico/stars/v1/stars_large_3.png",
            "id": "HfOhzLIlJoUKSKU8euclqA"
        },
        {
            "rating": 5,
            "excerpt": "Dennis and his team did an amazing job on the roof of my fiancee's 2002 Acura RSX after years of living by the beach in San Francisco had mostly rusted...",
            "time_created": 1354741952,
            "rating_image_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/f1def11e4e79/ico/stars/v1/stars_5.png",
            "rating_image_small_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/c7623205d5cd/ico/stars/v1/stars_small_5.png",
            "user": {
                "image_url": "http://s3-media3.ak.yelpcdn.com/photo/ZOzoahw0Go_DEPLvxCaP_Q/ms.jpg",
                "id": "kOqCnCjYn0EbAhtH1tfjcw",
                "name": "Jason H."
            },
            "rating_image_large_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/22affc4e6c38/ico/stars/v1/stars_large_5.png",
            "id": "YzZg1LX6zeRaurq9tYUcMw"
        },
        {
            "rating": 5,
            "excerpt": "It's been a year since I had my car painted here, and I gotta say: It still looks just as good as it did when I first picked it up. You would never know...",
            "time_created": 1361043626,
            "rating_image_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/f1def11e4e79/ico/stars/v1/stars_5.png",
            "rating_image_small_url": "http://s3-media1.ak.yelpcdn.com/assets/2/www/img/c7623205d5cd/ico/stars/v1/stars_small_5.png",
            "user": {
                "image_url": "http://s3-media1.ak.yelpcdn.com/photo/58coTtu1x5riHSgFEAQsfw/ms.jpg",
                "id": "kVrW3138d5VL-AZ97wFF4A",
                "name": "Jeanne M."
            },
            "rating_image_large_url": "http://s3-media3.ak.yelpcdn.com/assets/2/www/img/22affc4e6c38/ico/stars/v1/stars_large_5.png",
            "id": "r5WtlQVMXiIMBR6S3N7RZw"
        }
    ],
    "phone": "9517870227",
    "snippet_text": "Dennis and his team did an amazing job on the roof of my fiancee's 2002 Acura RSX after years of living by the beach in San Francisco had mostly rusted...",
    "image_url": "http://s3-media3.ak.yelpcdn.com/bphoto/kodoEcmgHRG61pPaWRndbw/ms.jpg",
    "categories": [
        [
            "Body Shops",
            "bodyshops"
        ],
        [
            "Auto Repair",
            "autorepair"
        ]
    ],
    "display_phone": "+1-951-787-0227",
    "rating_img_url_large": "http://s3-media4.ak.yelpcdn.com/assets/2/www/img/9f83790ff7f6/ico/stars/v1/stars_large_4_half.png",
    "id": "economy-paint-and-collision-riverside",
    "is_closed": false,
    "location": {
        "city": "Riverside",
        "display_address": [
            "2548 Rubidoux Blvd",
            "Riverside, CA 92509"
        ],
        "geo_accuracy": 8,
        "postal_code": "92509",
        "country_code": "US",
        "address": [
            "2548 Rubidoux Blvd"
        ],
        "coordinate": {
            "latitude": 34.0132437,
            "longitude": -117.3923804
        },
        "state_code": "CA"
    }
}

回答1:


You are probably having trouble because reviews is an array and you are trying to access it as a JSON object.

$obj = json_decode($data, TRUE);
for($i=0; $i<count($obj['reviews']); $i++) {
    echo "Rating is " . $obj['reviews'][$i]["rating"] . " and the excerpt is " . $obj['reviews'][$i]["excerpt"] . "<BR>";
}



回答2:


I'm not sure what exactly you want but I guess you want print it just for debugging right now. You can try with print_r($obj); and var_dump($obj); - they must print something, especially var_dump(). When you see the data, you can easily edit function a little bit, so you can do for instance print_r($obj->reviews) or print_r($obj['reviews']), depending if $obj is object or array.




回答3:


You can use var_dump or print_r.

<?php 
$decodedJSON = json_decode($jsonData);

// Put everyting to the screen with var_dump;
var_dump($decodedJSON);

// With print_r ( useful for arrays );
print_r($decodedJSON);

// List just review ratings with foreach;
foreach($decodedJSON['reviews'] as $review){
    echo $review['rating'];
}
?>



回答4:


Here using objects example (to read reviews...raiting):

$jsonObject = json_decode($data);
foreach ($jsonObject->reviews as $data) {
    echo $data->rating;
}


来源:https://stackoverflow.com/questions/15607029/how-to-loop-through-json-array-using-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!