无法读取json文件并为本地变量赋值

时间:2014-06-28 19:27:28

标签: php json

我正在尝试使用下面列出的php代码读取json文件,但我无法将这些值分配给局部变量。

有人可以帮我解释一下我做错了什么吗?

 <?php

 $file = "http://localsurch.com/deals2.txt";
 $response = json_decode(file_get_contents($file), true);

//print_r($response);

foreach ($response as $mydeal)
{
    $category               = $mydeal->category->name;
$title               = $mydeal->websiteTitle;
$finePrint              = $mydeal->finePrint;
$imageURL       = $mydeal->imageURL;
$merchant           = $mydeal->merchant->displayName;
$streetaddress1     = $mydeal->redemptionLocations->addressStreet1;

}

?>

阵 (     [date] =&gt; 28-Jun-14 5.46.34.871 PM     [deals] =&gt;排列         (             [0] =&gt;排列                 (                     [category] ​​=&gt;排列                         (                             [name] =&gt;维修&amp;服务                             [路径] =&gt;排列                                 (                                     [0] =&gt;汽车                                     [1] =&gt;维修&amp;服务                                 )

                    )

                [websiteTitle] => Three Full-Service Oil Changes, Tire Rotations, and More
                [description] => <p>Since 1988, <a href="http://www.planetsupersaver.com/"target="_blank"> Planet Super Saver</a> has been saving members thousands of dollars on their automotive maintenance and repairs nationwide. Their goal is to unite you with trustworthy, top-notch service centers in your area at a huge savings. The service center's goal is to introduce themselves to you with the hopes you'll become a long-term customer through their honesty and professional service you can depend on.</p>
  • 自动维护包$ 30(价值$ 179)
  • 包括三次完整换油,两次轮胎旋转,诊断和检查
  • 预防性护理可能意味着在路上节省大笔费用
  • 高效,友好的专业人士正确完成工作
                [finePrint] => <ul><li><b>Online redemption required at planetsupersaver.com; a punch card will be mailed within 5 business days</b></li>

  • Punch卡自兑换之日起有效期为1年
  • 需要预约,视情况而定;欲了解更多信息,请致电Planet Super Saver客户支持,电话:480-921-8282
  • 24小时商户取消/重新安排政策适用;凭证被没收的凭证
  • Punch Card可在同一个人或家庭拥有的车辆之间转让,可以多次使用
  • 仅对购买时选择的位置有效
  • 不能与任何其他优惠或促销相结合
  • 尽可能多地购买;发送尽可能多的礼物
  • 完全换油包括最多5夸脱的油,润滑油和过滤器。额外的夸脱和合成或柴油可以支付额外费用
  • 某些需要制冷剂和冷却剂的服务需要额外付费
  • 不包括4.50美元的处置费,税金和小费
  • 购买后可立即使用
  • 促销价格自购买日期起180天内到期
  • 支付金额自购买日期起过去5年
  •                     [asin] =&gt; B00LBL758W                     [imageURL] =&gt; /图像/ G / 01 /余烬/交易/ c617b334d1893eae7cbc94301fab538c5880b3e24f95669d10ad118fe38eaadc                     [商家] =&gt;排列                         (                             [displayName] =&gt; Planet Super Saver                         )

                    [offerEndTime] => 1411714800000
                    [options] => Array
                        (
                            [0] => Array
                                (
                                    [title] => 7111 Sudley Rd Location - Auto Maintenance Package  (Three Complete Oil Changes, Two Tire Rotations, Diagnostics, and Inspections)
                                    [value] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 17900
                                        )
    
                                    [price] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 3000
                                        )
    
                                )
    
                            [1] => Array
                                (
                                    [title] => 7892 Sudley Rd Location - Auto Maintenance Package  (Three Complete Oil Changes, Two Tire Rotations, Diagnostics, and Inspections)
                                    [value] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 17900
                                        )
    
                                    [price] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 3000
                                        )
    
                                )                          
    
                        )
    
                    [geographies] => Array
                        (
                            [0] => Array
                                (
                                    [seoName] => northern-virginia
                                    [displayName] => Northern Virginia
                                )
    
                            [1] => Array
                                (
                                    [seoName] => montgomery-county
                                    [displayName] => Montgomery County
                                )
    
                            [2] => Array
                                (
                                    [seoName] => washington-dc
                                    [displayName] => Washington, D.C.
                                )
    
                            [3] => Array
                                (
                                    [seoName] => arlington-alexandria
                                    [displayName] => Arlington / Alexandria
                                )
    
                        )
    
                    [redemptionLocations] => Array
                        (
                            [0] => Array
                                (
                                    [addressPostalCode] => 20109
                                    [addressStateOrProvince] => VA
                                    [addressStreet1] => Battlefield BP
                                    [addressStreet2] => 7111 Sudley Rd
                                    [geography] => Array
                                        (
                                            [displayName] => Northern Virginia
                                        )
    
                                    [latitude] => 38.799067
                                    [longitude] => -77.518125
                                    [phoneNumber] => 480-921-8282
                                )
                        )
    
                )
    
            [1] => Array
                (
                    [category] => Array
                        (
                            [name] => Indian
                            [path] => Array
                                (
                                    [0] => Restaurants
                                    [1] => Indian
                                )
    
                        )
    
                    [websiteTitle] => $15 to Spend on Food and Drink
                    [description] => <p>Dine on savory Pakistani and Indian cuisine at this eatery, where everything is Halal. Enjoy kabobs, curries, and Biryani&#8212but don't miss out on their house specialty, The Karahi, with chicken, beef, goat, lamb, fish or paneer:</p>
    
    • 花15美元购买食品和非酒精饮料$ 7
    • 各种菜单包括包装,沙拉,咖喱和烧烤收藏
    • 我们推荐木炭鸡组合,包括温暖的na和美味的一面

    炭火鸡的网站|实

                    [finePrint] => <ul><li>Limit 2 per customer </li>
    

  • 每次访问限制每张表
  • 仅限用餐或外卖
  • 不含酒精
  • 不包括假期
  • 必须在一次访问中使用整个值
  • 购买后第二天开始使用
  • 2014年10月12日之后的促销价值
  • 支付金额自购买日期起过去5年
  •                     [asin] =&gt; B00L1OHHZK                     [imageURL] =&gt; /图像/ G / 01 /余烬/交易/ ab799f011c6041f1d99b776d4e11f8b7e0e3c2422a6fd1ccae595d5c70c2937c                     [商家] =&gt;排列                         (                             [displayName] =&gt;炭火鸡                         )

                    [offerEndTime] => 1405148400000
                    [options] => Array
                        (
                            [0] => Array
                                (
                                    [title] => $15 to Spend on Food and Nonalcoholic Drinks
                                    [value] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 1500
                                        )
    
                                    [price] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 700
                                        )
    
                                )
    
                        )
    
                    [geographies] => Array
                        (
                            [0] => Array
                                (
                                    [seoName] => northern-virginia
                                    [displayName] => Northern Virginia
                                )
    
                        )
    
                    [redemptionLocations] => Array
                        (
                            [0] => Array
                                (
                                    [addressPostalCode] => 20151
                                    [addressStateOrProvince] => VA
                                    [addressStreet1] => 13969 Metrotech Drive
                                    [addressStreet2] => 
                                    [geography] => Array
                                        (
                                            [displayName] => Northern Virginia
                                        )
    
                                    [latitude] => 38.895558
                                    [longitude] => -77.4283257
                                    [phoneNumber] => 703-953-3700
                                )
    
                        )
    
                )
    
            [2] => Array
                (
                    [category] => Array
                        (
                            [name] => Watches
                            [path] => Array
                                (
                                    [0] => Retail Products
                                    [1] => Watches
                                )
    
                        )
    
                    [websiteTitle] => Watch-Battery Replacement or Watch Repair
                    [description] => <p>Fashion Time is the premier spot in Maryland and Virginia to buy and repair all your timepieces.  Whether you're in the market for a grandfather clock or a new stem for your watch, these time experts can help. </p><ul><li>$6 ($13 value) for a battery replacement for a non-Swiss watch</li><li>$19 ($40 value) for a battery replacement for a Swiss watch</li><li>$20 for $40 to spend on watches or watch repair</li><li>Old-fashioned craftsmen and technicians are experts in timepieces </li></ul><p>Fashion Time on <a href="https://www.facebook.com/pages/Fashion-Time/150334105035439" target="_blank">Facebook</a></p>
                    [finePrint] => <p></p><ul><li>Buy as many as you like; send as many as you like as gifts<br></li><li>Limit 1 voucher per customer per visit<br></li><li>Valid only for option purchased<br></li><li>Excludes sale items<br></li><li>Valid only for in-store purchases<br></li><li>Cannot be combined with any other offers or promotions<br></li><li>Entire value per voucher must be used in a single visit </li><li>Available for use beginning the day after purchase</li><li>PROMOTIONAL VALUE EXPIRES 180 DAYS FROM THE PURCHASE DATE</li><li>PAID VALUE EXPIRES 5 YEARS FROM THE PURCHASE DATE</li></ul><p></p>
                    [asin] => B00KO8KOMM
                    [imageURL] => /images/G/01/ember/deals/7d648552caa12945ae14ee4554d255b21e1ae7739fce1f4be07ebf83e495e4
                    [merchant] => Array
                        (
                            [displayName] => Fashion Time
                        )
    
                    [offerEndTime] => 1411542000000
                    [options] => Array
                        (
                            [0] => Array
                                (
                                    [title] => Battery Replacement for a Non-Swiss Watch
                                    [value] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 1300
                                        )
    
                                    [price] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 600
                                        )
    
                                )
    
                            [1] => Array
                                (
                                    [title] => Battery Replacement for a Swiss Watch
                                    [value] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 4000
                                        )
    
                                    [price] => Array
                                        (
                                            [currencyCode] => USD
                                            [amountInBaseUnit] => 1900
                                        )
    
                                )
    
                        )
    
                    [geographies] => Array
                        (
                            [0] => Array
                                (
                                    [seoName] => northern-virginia
                                    [displayName] => Northern Virginia
                                )
    
                            [1] => Array
                                (
                                    [seoName] => montgomery-county
                                    [displayName] => Montgomery County
                                )
    
                        )
    
                    [redemptionLocations] => Array
                        (
                            [0] => Array
                                (
                                    [addressPostalCode] => 20166
                                    [addressStateOrProvince] => VA
                                    [addressStreet1] => 2110 D Dulles Town Ctr
                                    [addressStreet2] => 
                                    [geography] => Array
                                        (
                                            [displayName] => Northern Virginia
                                        )
    
                                    [latitude] => 39.035249
                                    [longitude] => -77.42987
                                    [phoneNumber] => 571-434-8875
                                )
    
                            [1] => Array
                                (
                                    [addressPostalCode] => 22102
                                    [addressStateOrProvince] => VA
                                    [addressStreet1] => 1961 Chain Bridge Rd
                                    [addressStreet2] => 
                                    [geography] => Array
                                        (
                                            [displayName] => Northern Virginia
                                        )
    
                                    [latitude] => 38.91971111
                                    [longitude] => -77.2259265
                                    [phoneNumber] => 703-893-9005
                                )
    
                        )
    
                )               
    
        )
    

    1 个答案:

    答案 0 :(得分:2)

    你告诉json_decode()给你一个数组但是你试图像对象一样访问它的值。要么返回一个对象......

    $response = json_decode(file_get_contents($file));
    

    ...或使用数组语法访问这些值:

    foreach ($response as $mydeal)
    {
        $category       = $mydeal['category']['name'];
        $title          = $mydeal['websiteTitle'];
        $finePrint      = $mydeal['finePrint'];
        $imageURL       = $mydeal['imageURL'];
        $merchant       = $mydeal->merchant['displayName'];
        $streetaddress1 = $mydeal['redemptionLocations']['addressStreet1']; 
    }