Karthik Malla
Karthik Malla

Reputation: 5800

How to print jSON values with loop

I am using the following code to print the output of the jSON response but when I try to print

echo $obj->HotelListResponse->customerSessionId;  // This is working.

echo $obj->HotelListResponse->HotelList->HotelSummary->name; // This is not working.

When the response contains only one node then its printing perfectly but when there are multiple nodes with same name then its not printing. I tried using foreach just like the below. I also tried using while loop but still I am unable to print the list of hotel names.

My jSON decoded output is like http://pastebin.com/Fr21DkEk

Total code:

$url = "https://api.eancdn.com/ean-services/rs/hotel/v3/list?cid=55505&minorRev=99&apiKey=cbrzfta369qwyrm9t5b8y8kf&locale=en_AU&currencyCode=AUD&xml=<HotelListRequest><city>Brisbane</city><stateProvinceCode>QLD</stateProvinceCode><countryCode>AU</countryCode><arrivalDate>10/16/2014</arrivalDate><departureDate>10/18/2014</departureDate><RoomGroup><Room><numberOfAdults>2</numberOfAdults></Room></RoomGroup><numberOfResults>25</numberOfResults></HotelListRequest>";
$json = file_get_contents($url);
$obj = json_decode($json);

foreach($obj as $val) {
echo $val->HotelListResponse->HotelList->HotelSummary->name;
}

Upvotes: 1

Views: 89

Answers (3)

Kevin
Kevin

Reputation: 41885

Yes you can directly access them inside the foreach. Like this:

foreach($obj->HotelListResponse->HotelList->HotelSummary as $val) {
             // ^^
    // since you're interested on just names, you can point it directly on that object, then each of that batch is in `$val`
    echo $val->name . '<br/>';
}

// or start from the parent
foreach($obj as $values) {

    $customerSessionId = $values->customerSessionId;
    echo $customerSessionId . '<hr/>';
    $hotelList = $values->HotelList;
    foreach($hotelList->HotelSummary as $hotelsummary) {
        echo $hotelsummary->name . '<br/>';
    }
}

Upvotes: 1

patarkf
patarkf

Reputation: 26

Try this

foreach($obj->HotelListResponse->HotelList->HotelSummary as $val) {
    echo $val->name . '<br/>';
}

Upvotes: 1

John Conde
John Conde

Reputation: 219804

HotelSummary is an array:

echo $val->HotelListResponse->HotelList->HotelSummary[0]->name;

If you want all of the hotel summaries:

foreach($obj as $val) {
    foreach($val->HotelListResponse->HotelList->HotelSummary as $sum) {
        echo $sum->name;
    }  
}

Upvotes: 1

Related Questions