0

I am trying to work with an API. Which returns json. below is the output:

{
    "meta": {
        "code": 200,
        "next": "http://api.yipit.com/v1/deals/?limit=1&key=AKVP839qHEM7TgXV&offset=1",
        "previous": null
    },
    "response": {
        "deals": [
            {
                "active": 1,
                "business": {
                    "id": 11009,
                    "locations": [
                        {
                            "address": "120 Millenium Dr",
                            "id": 974228,
                            "lat": 44.5400434,
                            "locality": "Chester",
                            "lon": -64.2325975,
                            "phone": null,
                            "smart_locality": "Chester",
                            "state": "NS",
                            "zip_code": "B0J 1J0"
                        },
                        {
                            "address": "95 Wentworth St",
                            "id": 974229,
                            "lat": 44.6685886,
                            "locality": "Dartmouth",
                            "lon": -63.5698711,
                            "phone": null,
                            "smart_locality": "Dartmouth",
                            "state": "NS",
                            "zip_code": "B2Y 2T3"
                        }
                    ],
                    "name": "Fit Body Boot Camp",
                    "url": "http://www.fitbodybootcampbeachwood.com/"
                },
                "date_added": "2013-01-05 04:14:17",
                "description": "Exercise keeps the body in peak condition, which explains the marbleized ThighMaster lying next to Michelangelo's David. Enjoy an anatomical renaissance with this Groupon. Choose Between Two Options  $29 for a 10-day Fit and Firm program (a $124 value) $47 for a four-week Rapid Fat Loss program (a $247 value)  Both options include a nutrition consultation, elective weigh-ins and body-fat measurements, and unlimited boot-camp sessions for the duration of the program. The sessions combine cardio training with resistance and weight work, helping to maximize caloric burn both during and after the workout. Click here to see the class schedule, and click here for a list of frequently asked questions.",
                "discount": {
                    "formatted": "77%",
                    "raw": 77
                },
                "division": {
                    "active": 1,
                    "country": "Canada",
                    "lat": 44.648881,
                    "lon": -63.575312,
                    "name": "Halifax, Nova Scotia",
                    "slug": "halifax-nova-scotia",
                    "time_zone_diff": -4,
                    "url": "http://yipit.com/halifax-nova-scotia/"
                },
                "end_date": "2013-01-11 03:59:59",
                "id": 14517543,
                "images": {
                    "image_big": "http://b.yipitcdn.com/cache/deal/10-day-fit-and-firm-program-or-four-week-rapid-fat-loss-program-at-fit-body-boot-camp-up-to-81-off-42-1357359256_display_image.jpg",
                    "image_small": "http://a.yipitcdn.com/cache/deal/10-day-fit-and-firm-program-or-four-week-rapid-fat-loss-program-at-fit-body-boot-camp-up-to-81-off-42-1357359256_small_image.jpg"
                },
                "mobile_url": "http://m.yipit.com/halifax-nova-scotia/groupon/10-day-fit-and-firm-program-or-four-week-rapid-fat-loss-program-at-fit-body-boot-camp-up-to-81-off-42/?bp_ad=1",
                "price": {
                    "formatted": "$29",
                    "raw": 29.00
                },
                "source": {
                    "name": "Groupon",
                    "paid": 0,
                    "slug": "groupon",
                    "url": ""
                },
                "tags": [
                    {
                        "name": "Boot Camp",
                        "slug": "boot-camp",
                        "url": ""
                    }
                ],
                "title": "10-Day Fit-and-Firm Program or Four-Week Rapid Fat-Loss Program at Fit Body Boot Camp (Up to 81% Off)",
                "url": "http://yipit.com/aff/eval/deal/?deal=RXk8HSAz&key=t5pm9EBw",
                "value": {
                    "formatted": "$124",
                    "raw": 124.00
                },
                "yipit_title": "Up to 81% Off at Fit Body Boot Camp",
                "yipit_url": "http://yipit.com/halifax-nova-scotia/groupon/10-day-fit-and-firm-program-or-four-week-rapid-fat-loss-program-at-fit-body-boot-camp-up-to-81-off-42/"
            }
        ]
    }
}

In PHP I need to receive id,lat,lan,name,url,yipit_url,yipit_id,img_bg, city, zip etc. But I don't know how to show those json object on a php page. Please help me.

Thanks, Enamul

4

4 回答 4

4

http://php.net/manual/en/book.json.php

In particular you might want to look at json_decode()

A small example:

<?php

function JSONPrepare($json) {
    // This will convert ASCII/ISO-8859-1 to UTF-8.
    // Be careful with the third parameter (encoding detect list), because
    // if set wrong, some input encodings will get garbled (including UTF-8!)
    $input = mb_convert_encoding($json, 'UTF-8', 'ASCII,UTF-8,IS0-8859-1');

    // Remove UTF-8 BOM if present, json_decode() does not like it.
    if (substr($input, 0, 3) == pack("CCC", 0xEF, 0xBB, 0xBF)) {
        $input = substr($input, 0, 3);
    }

    return $input;
}

foreach (json_decode(JSONPrepare($my_json), true) as $k => $v) {
    // process the array here
}
?>
于 2013-01-05T04:48:43.567 回答
1

*"Yeah I know it should be done with json_decode. But I don't know how to do it."*

Ok, somehow you're getting data into a variable, let's say $data

$array=json_decode($data, true);

will convert that into an array which in this case has other arrays and variables inside id

To see the whole thing print_r($array); and view source code, or echo '<pre>'; print_r($array);

So to get to the bits you want to need to traverse the array, but what you want is in one element of many in an array locations so we need to iterate through them

foreach ($array['response']['deals']['active']['locations'] as $location)
{
     echo 'id:'.$location['id'];
     echo 'lat':$location['lat'];
     //ect
}

or you could pick the first one

echo $array['response']['deals']['active']['locations'][0]['id'];
于 2013-01-05T04:57:32.567 回答
0

json_decode will convert the json into a PHP object.

Using $response = json_decode($json); where $json is the JSON you have posted above, then:

echo $response->deals->business->id; // 11009
echo $response->deals->business->locations[0]->id; //974228 
echo $response->deals->ypit_url; // http://yipit.com/h...y-boot-camp-up-to-81-off-42/
于 2013-01-05T04:56:31.603 回答
0

You can even get those data as array which will be easy to parse than objects.

$parsedData = json_decode($jsondata, 1);

print_r ($parsedData);

于 2013-01-05T05:03:16.257 回答