Intereting Posts

Как пропустить JSON-массив с помощью PHP

Мой PHP-код:

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

Хотя он работает для не-массивов, я не могу на всю жизнь понять, как печатать все значения в массиве «Обзоры».

То, что я хотел бы сделать, – это пропустить этот ответ, возможно, с помощью forreach (), в результате чего список, содержащий рейтинг и выдержку для каждого обзора в ответе.

Любое руководство / направление приветствуется.

Ниже приведен JSON, с которым я работаю. (это ответ от API Yelp).

 { "is_claimed": true, "rating": 4.5, "mobile_url": "http://m.yelp.com/biz/economy-paint-and-collision-riverside", "rating_img_url": "http://img.ruphp.com/php/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://img.ruphp.com/php/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://img.ruphp.com/php/stars_3.png", "rating_image_small_url": "http://img.ruphp.com/php/stars_small_3.png", "user": { "image_url": "http://img.ruphp.com/php/ms.jpg", "id": "V9MDZvEBv-tBTF4YIoc7mg", "name": "Sydney H." }, "rating_image_large_url": "http://img.ruphp.com/php/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://img.ruphp.com/php/stars_5.png", "rating_image_small_url": "http://img.ruphp.com/php/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://img.ruphp.com/php/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://img.ruphp.com/php/stars_5.png", "rating_image_small_url": "http://img.ruphp.com/php/stars_small_5.png", "user": { "image_url": "http://img.ruphp.com/php/ms.jpg", "id": "kVrW3138d5VL-AZ97wFF4A", "name": "Jeanne M." }, "rating_image_large_url": "http://img.ruphp.com/php/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://img.ruphp.com/php/ms.jpg", "categories": [ [ "Body Shops", "bodyshops" ], [ "Auto Repair", "autorepair" ] ], "display_phone": "+1-951-787-0227", "rating_img_url_large": "http://img.ruphp.com/php/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" } } 

Вероятно, у вас проблемы, потому что обзоры – это массив, и вы пытаетесь получить к нему доступ как объект JSON.

 $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>"; } 

Я не уверен, что именно вы хотите, но я думаю, вы хотите распечатать его только для отладки прямо сейчас. Вы можете попробовать с print_r($obj); и var_dump($obj); – они должны что-то печатать, особенно var_dump() . Когда вы увидите данные, вы можете легко отредактировать функцию немного, так что вы можете сделать, например, print_r($obj->reviews) или print_r($obj['reviews']) , в зависимости от того, является ли $obj объектом или массивом.

Вы можете использовать var_dump или 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']; } ?>