如何从php接收json数据?

时间:2013-01-05 04:46:37

标签: php json

我正在尝试使用API​​。返回json。以下是输出:

{
    "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/"
            }
        ]
    }
}

在PHP中,我需要接收id,lat,lan,name,url,yipit_url,yipit_id,img_bg, city, zip等。但我不知道如何在php页面上显示这些json对象。请帮帮我。

谢谢, Enamul

4 个答案:

答案 0 :(得分:4)

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

您可能希望查看json_decode()

一个小例子:

<?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
}
?>

答案 1 :(得分:1)

*“是的,我知道应该用json_decode完成。但我不知道怎么做。”*

好的,不知何故,你将数据输入变量,比方说$data

$array=json_decode($data, true);

会将其转换为数组,在这种情况下,其他数组和变量在id

要查看整个内容print_r($array);并查看源代码,或echo '<pre>'; print_r($array);

所以要找到你想要遍历数组所需的位,但是你想要的是数组locations中许多元素的一个元素,所以我们需要迭代它们

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

或者你可以选择第一个

echo $array['response']['deals']['active']['locations'][0]['id'];

答案 2 :(得分:0)

json_decode会将json转换为PHP对象。

使用$response = json_decode($json);,其中$ json是您在上面发布的JSON,然后:

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/

答案 3 :(得分:0)

您甚至可以将这些数据作为数组获取,这些数据比对象更容易解析。

$parsedData = json_decode($jsondata, 1);

print_r($ parsedData);