【问题标题】:yippits api PHP json decodeyippits api PHP json解码
【发布时间】:2026-02-10 05:40:01
【问题描述】:

我正在尝试循环并从该响应中获取详细信息。无论有多少结果,“交易”部分显然都会重复。我用这个解码json响应

$jsonurl = "http://api.yipit.com/v1/deals/?key=&tag=spa";
$json = file_get_contents($jsonurl,0,null,null);
$json_output = json_decode($json);

但不完全确定如何通过这个循环使用 foreach ?任何帮助入门将不胜感激!

"meta": {
    "code": 200,
    "next": "http://api.yipit.com/v1/deals/?tag=spa&limit=20&key=&offset=20",
    "previous": null
},
"response": {
    "deals": [
        {
            "active": 1,
            "business": {
                "id": 253658,
                "locations": [
                    {
                        "address": "9634 N May Ave",
                        "id": 923137,
                        "lat": 35.5695651,
                        "locality": "Oklahoma City",
                        "lon": -97.5671643,
                        "phone": "405-748-4070",
                        "smart_locality": "Oklahoma City",
                        "state": "OK",
                        "zip_code": "73120"
                    }
                ],
                "name": "Vibrant Life Center",
                "url": "http://vibrantlifeokc.com/"
            },
            "date_added": "2013-05-07 10:43:10",
            "description": "Let the friendly, experienced technicians at this center help you rejuvenate your body with state-of-the-art LipoLaser treatments: \u2022 $77 ($250 value) for one LipoLaser treatment \u2022 $147 ($500 value) for two LipoLaser treatments \u2022 $249 ($1,000 value) for four LipoLaser treatments Why We Love It At this convenient location in The Village, experts use the Stella LipoLaser for this noninvasive procedure for clients 18 and older. You could feel more confident after just one quick 30-minute treatment, so call to schedule an appointment at this office, which is open Tuesday through Saturday. Vibrant Life Center's Website | Facebook",
            "discount": {
                "formatted": "69%",
                "raw": 69
            },
            "division": {
                "active": 1,
                "country": "United States",
                "lat": 35.4673709,
                "lon": -97.516583,
                "name": "Oklahoma City",
                "slug": "oklahoma-city",
                "time_zone_diff": -6,
                "url": "http://yipit.com/oklahoma-city/"
            },
            "end_date": "2013-05-14 09:59:59",
            "id": 19852358,
            "images": {
                "image_big": "http://a.yipitcdn.com/thumbor/zf6rjiAKcs8k9F5RE_rHARXxTfE=/fit-in/372x372/a.yipitcdn.com/deal/feel-fitter-faster-with-lipolaser-treatments-1367922391.jpg",
                "image_small": "http://a.yipitcdn.com/thumbor/b4dO4-uTRFySlYgBVQAxrLYwk4Q=/fit-in/212x212/a.yipitcdn.com/deal/feel-fitter-faster-with-lipolaser-treatments-1367922391.jpg",
                "image_smart": "http://a.yipitcdn.com/thumbor/9p60gjXqwYoPEH637m5IA9_s8c4=/408x357/smart/a.yipitcdn.com/deal/feel-fitter-faster-with-lipolaser-treatments-1367922391.jpg"
            },
            "mobile_url": "http://m.yipit.com/business/vibrant-life-center/?bp_ad=1",
            "price": {
                "formatted": "$77",
                "raw": 77.00
            },
            "source": {
                "name": "LivingSocial",
                "paid": 0,
                "slug": "living-social",
                "url": ""
            },
            "tags": [
                {
                    "name": "Spa",
                    "slug": "spa",
                    "url": ""
                }
            ],
            "title": "Feel Fitter Faster with LipoLaser Treatments",
            "url": "http://yipit.com/aff/eval/deal/?deal=NHFZJTjT&key=fnY4CzVj",
            "value": {
                "formatted": "$250",
                "raw": 250.00
            },
            "yipit_title": "One, Two, or Four LipoLaser Treatments",
            "yipit_url": "http://yipit.com/business/vibrant-life-center/"
        },

【问题讨论】:

    标签: php object foreach json stdclass


    【解决方案1】:

    json_decode() 实际上应该向您返回一个对象。为了访问这些属性,您可以echo $json_output->meta->code 获取 200 或 $json_output->deals[0]->business->id 获取第一笔交易的企业 ID。注意{}[]的区别

    我总是建议使用var_dump($json_output),这样您就可以在解码后清楚地看到对象的结构。

    【讨论】:

      【解决方案2】:

      $json_output->response->deals - 您收到的所有交易的数组。因此,您需要遍历它以获取它的任何信息。

      例如此代码将回显所有交易说明:

      foreach($json_output->response->deals as $deal)
      {
          echo $deal->description.'<br />';
      }
      

      [] - 表示数组。它可以使用循环进行迭代。 {} - 表示对象(StdClass 实例)。其属性可通过-&gt; 访问。

      例如可以像这样检索大图像(在之前的foreach循环的上下文中):

      echo $deal-&gt;images-&gt;image_big;

      【讨论】:

      • 这工作得很好,只是给其他想要做同样事情的人你的回答说 $json_output->reponse 应该是响应。 (错字)一旦我看到错字,它就起作用了。谢谢!!