【问题标题】:JSON Objects to PHP Error [closed]JSON对象到PHP错误[关闭]
【发布时间】:2014-09-11 19:11:11
【问题描述】:

我编写了这个 PHP 脚本来回显包含所需内容的 div 的完整示意图。但是,当我运行它时,我只是得到一个空白页。怎么了?

代码:

<?
$url = 'http://socialclub.rockstargames.com/crewapi/the_greeks_360/gtav/photo';
$json1 = utf8_encode(file_get_contents($url));

$photos = json_decode($json1, false);
foreach ($json1 as $pic)
{
    echo '<div style="opacity:0.7;width:310px;height:259px;">';
    echo '<div style="width:310px;height:174px;display:block;">';
    echo '<img src="http://prod.cloud.rockstargames.com/' . $pic->photos->Meta->ImgSrc . '" width="310" height="174" alt=""></img>';
    echo '</div><br>';
    echo '<div style="opacity:0.7;width:310px;height:52px;display:block;padding:10px;">';
    echo '<p>' . $pic->photos->Meta->location . '</p><br>';
    echo '<p><a href="http://socialclub.rockstargames.com/member/' . $pic->photos->Meta->nickname . '" target="_blank" alt="">' . $pic->photos->Meta->gamertag . '</a></p><br>';
    echo '</div>';
    echo '<div style="opacity:0.9;width:310px;height:32px;display:block;padding:8px;margin-bottom:1px;">';
    echo '<a href="http://socialclub.rockstargames.com/games/gtav/snapmatic/photo/' . $pic->photos->Meta->Id . '" target="_blank" class="gtavicon-icon_thumbs_up"></a> ' . $pic->photos->Meta->Liked->LikeCount . '  |  ';
    echo '<a href="http://socialclub.rockstargames.com/games/gtav/snapmatic/photo/' . $pic->photos->Meta->Id . '" target="_blank" class="gtavicon-icon_chat"></a> ' . $pic->photos->Comments->total;
    echo '</div>';
    echo '</div>';                  
}

?>

JSON 文件的一个示例是:

{
    "photos": [{
        "Meta": {
            "CreatedTimestamp": 1409242029,
            "Name": "before the destruction",
            "HardTags": ["Burton"],
            "UserTags": [],
            "Liked": {
                "Liked": false,
                "LikeCount": 7
            },
            "data": {
                "area": "BURTON",
                "street": "0",
                "scr": "1",
                "loc": {
                    "z": 40.26,
                    "x": -395.67,
                    "y": -101.2
                },
                "mode": "FREEMODE"
            },
            "location": "Burton",
            "avatar": "GTAO/gtao09.png",
            "rockstarid": "45761616",
            "platformUserId": "2535413697273494",
            "creatorMedal": "platinum",
            "plat": "XBox",
            "gamertag": "firstkiller3000",
            "crewurl": "/crew/the_greeks_360",
            "crewtag": "GRKS",
            "crewrankrev": 2,
            "crewIsPrivate": true,
            "crewIsFounderCrew": false,
            "crewColor": "#70FF03",
            "crewRankOrder": 3,
            "Id": "WsRTTpMDsUi7A8tSvNhrvQ",
            "ImgSrc": "/ugc/gta5photo/8855/WsRTTpMDsUi7A8tSvNhrvQ/0_0.jpg",
            "nickname": "killer16478"
        },
        "Comments": {
            "total": 0,
            "totalreplies": 0,
            "count": 0,
            "results": []
        }
    }, {
        "Meta": {
            "CreatedTimestamp": 1399739945,
            "Name": "Burton",
            "HardTags": ["Burton"],
            "UserTags": [],
            "Liked": {
                "Liked": false,
                "LikeCount": 6
            },
            "data": {
                "area": "BURTON",
                "street": "0",
                "scr": "1",
                "loc": {
                    "z": 54.42,
                    "x": -402.63,
                    "y": -78.48
                },
                "mode": "FREEMODE"
            },
            "location": "Burton",
            "avatar": "GTAV/gtav05.png",
            "rockstarid": "20181442",
            "platformUserId": "2533274971471462",
            "creatorMedal": "platinum",
            "plat": "XBox",
            "gamertag": "TasosNGreek",
            "crewurl": "/crew/the_greeks_360",
            "crewtag": "GRKS",
            "crewrankrev": 4,
            "crewIsPrivate": true,
            "crewIsFounderCrew": false,
            "crewColor": "#70FF03",
            "crewRankOrder": 1,
            "Id": "XPgHUpYPfEijbL59xtHOfg",
            "ImgSrc": "/ugc/gta5photo/1556/XPgHUpYPfEijbL59xtHOfg/0_0.jpg",
            "nickname": "TasosNGreek"
        },
        "Comments": {
            "total": 1,
            "totalreplies": 0,
            "count": 1,
            "results": [{
                "id": "1837034",
                "rockstarId": "24879155",
                "txt": "no comment !",
                "dt": "2014-05-14T18:56:26Z",
                "avatar": "GTAV/gtav19.png",
                "nickname": "JohnysT122",
                "replies": []
            }]
        }
    }, {
        "Meta": {
            "CreatedTimestamp": 1403048295,
            "Name": "Paleto Forest",
            "HardTags": ["PaletoForest"],
            "UserTags": [],
            "Liked": {
                "Liked": false,
                "LikeCount": 5
            },
            "data": {
                "area": "PALFOR",
                "street": "0",
                "scr": "1",
                "loc": {
                    "z": 41.81,
                    "x": -816.33,
                    "y": 5387.35
                },
                "mode": "FREEMODE"
            },
            "location": "Paleto 
Forest",
            "avatar": "MaxPayne3/MP3_46.jpg",
            "rockstarid": "35911863",
            "platformUserId": "2533274827444615",
            "creatorMedal": "platinum",
            "plat": "XBox",
            "gamertag": "banedfromb1rth",
            "crewurl": "/crew/the_greeks_360",
            "crewtag": "GRKS",
            "crewrankrev": 4,
            "crewIsPrivate": true,
            "crewIsFounderCrew": false,
            "crewColor": "#70FF03",
            "crewRankOrder": 1,
            "Id": "yf9NPUEYXU2DYFHbmddt9A",
            "ImgSrc": "/ugc/gta5photo/8221/yf9NPUEYXU2DYFHbmddt9A
/0_0.jpg",
            "nickname": "zempili"
        },
        "Comments": {
            "total": 0,
            "totalreplies": 0,
            "count": 0,
            "results": []
        }
    }, {
        "Meta": {
            "CreatedTimestamp": 1406374405,
            "Name": "Burton",
            "HardTags": ["Burton"],
            "UserTags": [],
            "Liked": {
                "Liked": false,
                "LikeCount": 4
            },
            "data": {
                "area": "BURTON",
                "street": "0",
                "scr": "1",
                "loc": {
                    "z": 54.42,
                    "x": -322.5,
                    "y": -66.55
                },
                "mode": "FREEMODE"
            },
            "location": "Burton",
            "avatar": "GTAV/gtav02.png",
            "rockstarid": "43602473",
            "platformUserId": "2533274869248155",
            "creatorMedal": "platinum",
            "plat": "XBox",
            "gamertag": "NEMESIS135",
            "crewurl": "/crew/the_greeks_360",
            "crewtag": "GRKS",
            "crewrankrev": 4,
            "crewIsPrivate": true,
            "crewIsFounderCrew": false,
            "crewColor": "#70FF03",
            "crewRankOrder": 1,
            "Id": "EVgJFeX9cUq6knR4GCAYlA",
            "ImgSrc": "/ugc/gta5photo/3388/EVgJFeX9cUq6knR4GCAYlA/0_0.jpg",
            "nickname": "manolisG13"
        },
        "Comments": {
            "total": 0,
            "totalreplies": 0,
            "count": 0,
            "results": []
        }
    }],
    "total": "419"
}

【问题讨论】:

  • 这有什么“不起作用”的?它有什么作用?不做?有什么错误吗?关于这个问题,您可以向我们提供更多信息吗?你做了什么来尝试调试这个?
  • P.S.你的意思是foreach ($photos as $pic)
  • 我尝试添加,我没有看到任何我想看到的结果。只是空白,是的,存在一个值。
  • 当你得到“空白屏幕”时,打开error_reportingdisplay_errors 这样你就会知道发生了什么。

标签: php json object


【解决方案1】:

主要问题是您的照片密钥位置错误。

这应该可以工作

$data = json_decode($json1, false);
foreach ($data->photos as $pic) {
  echo '<div style="opacity:0.7;width:310px;height:259px;">';
  echo '<div style="width:310px;height:174px;display:block;">';
  echo '<img src="http://prod.cloud.rockstargames.com/' . $pic->Meta->ImgSrc . '" width="310" height="174" alt="" />';
  echo '</div><br>';
  echo '<div style="opacity:0.7;width:310px;height:52px;display:block;padding:10px;">';
  echo '<p>' . $pic->Meta->location . '</p><br>';
  echo '<p><a href="http://socialclub.rockstargames.com/member/' . $pic->Meta->nickname . '" target="_blank" alt="">' . $pic->Meta->gamertag . '</a></p><br>';
  echo '</div>';
  echo '<div style="opacity:0.9;width:310px;height:32px;display:block;padding:8px;margin-bottom:1px;">';
  echo '<a href="http://socialclub.rockstargames.com/games/gtav/snapmatic/photo/' . $pic->Meta->Id . '" target="_blank" class="gtavicon-icon_thumbs_up"></a> ' . $pic->Meta->Liked->LikeCount . '  |  ';
  echo '<a href="http://socialclub.rockstargames.com/games/gtav/snapmatic/photo/' . $pic->Meta->Id . '" target="_blank" class="gtavicon-icon_chat"></a> ' . $pic->Comments->total;
  echo '</div>';
  echo '</div>';
}

我建议改为使用视图而不是回显大量 html。看起来更好,更容易维护。

我可能会将其更改为类似的内容(如果可能的话,在单独的视图文件中)

foreach ($data->photos as $pic) { ?>
  <div style="opacity:0.7;width:310px;height:259px;">
    <div style="width:310px;height:174px;display:block;">
      <img src="http://prod.cloud.rockstargames.com/<?= $pic->Meta->ImgSrc ?>" width="310" height="174" alt="" />
    </div>
    <br>
    <div style="opacity:0.7;width:310px;height:52px;display:block;padding:10px;">
      <p><?= $pic->Meta->location ?></p><br>
      <p><a href="http://socialclub.rockstargames.com/member/<?= $pic->Meta->nickname ?>" target="_blank" alt=""><?= $pic->Meta->gamertag ?></a></p><br>
    </div>
    <div style="opacity:0.9;width:310px;height:32px;display:block;padding:8px;margin-bottom:1px;">
      <a href="http://socialclub.rockstargames.com/games/gtav/snapmatic/photo/<?= $pic->Meta->Id ?>" target="_blank" class="gtavicon-icon_thumbs_up"></a> <?= $pic->Meta->Liked->LikeCount ?>  |  
      <a href="http://socialclub.rockstargames.com/games/gtav/snapmatic/photo/<?= $pic->Meta->Id ?>" target="_blank" class="gtavicon-icon_chat"></a> <?= $pic->Comments->total ?>
    </div>
  </div>
<?php
}

下一步是将这些内联样式移动到它们所属的 css 文件中:)

这就是将样式移到自己的文件中后的样子

foreach ($data->photos as $pic) { ?>
  <div>
    <div>
      <img src="http://prod.cloud.rockstargames.com/<?= $pic->Meta->ImgSrc ?>" width="310" height="174" alt="" />
    </div>
    <div>
      <p><?= $pic->Meta->location ?></p>
      <p><a href="http://socialclub.rockstargames.com/member/<?= $pic->Meta->nickname ?>" target="_blank" alt=""><?= $pic->Meta->gamertag ?></a></p>
    </div>
    <div>
      <a href="http://socialclub.rockstargames.com/games/gtav/snapmatic/photo/<?= $pic->Meta->Id ?>" target="_blank" class="gtavicon-icon_thumbs_up"></a> <?= $pic->Meta->Liked->LikeCount ?>  |  
      <a href="http://socialclub.rockstargames.com/games/gtav/snapmatic/photo/<?= $pic->Meta->Id ?>" target="_blank" class="gtavicon-icon_chat"></a> <?= $pic->Comments->total ?>
    </div>
  </div>
<?php
}

【讨论】:

  • @Prix 修复了图像标签,没有查看 html,因为我觉得我已经在“代码审查”场景中冒险太远了。关于链接,我认为它们还可以,似乎他在其中使用了图标。
  • 不,您看到的来自 $pic 的值可能不包含链接。
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多