无法在PHP中显示JSON数据

时间:2017-10-10 11:09:46

标签: php json

我正在尝试在PHP中使用JSON而且我被困了。如果你能帮助我的话,我是新来的。

我想从下面的代码中显示“ list ”中的内容(例如列表,名称和/或frags)。

{
    "status": true,
    "hostname": "{IP}",
    "port": {PORT},
    "queryPort": {PORT},
    "name": "Cod2 Server",
    "map": "mp_genesisarc",
    "secured": true,
    "password_protected": false,
    "version": "1.3",
    "protocol": "udp",
    "players": {
        "online": 1,
        "max": "28",
        "list": [
            {
                "frags": "1",
                "ping": "54",
                "name": "Mr Anderson"
            }
        ]
    },
    "cached": false
}

这是我使用的代码(不起作用):

<?php
$serverip = "localhost";
$info = json_decode( file_get_contents( 'https://use.gameapis.net/cod2/query/info/000.000.00.0:0000'.$serverip ), true ); 
if(!$info['status']) {
    echo 'Offline';
} else {
    echo $info['players']['list']['name'];
}
?>

提前致谢, 吉姆。

5 个答案:

答案 0 :(得分:1)

$info['players']['list'][0]['name']

这将为您提供所需的元素。请尝试下次输出$info以自行查找此错误。

答案 1 :(得分:1)

尝试使用foreach循环。迭代数组时它更干净。

<?php
$serverip = "localhost";
$info = json_decode( file_get_contents( 'https://use.gameapis.net/cod2/query/info/000.000.00.0:0000'.$serverip ), true ); 

if(!$info['status']) {
    echo 'Offline';
} 
else {
    foreach ($info['players']['list'] as $player) {
        echo $player['name'];
    }
}
?>

答案 2 :(得分:0)

list您将拥有多个在线用户记录,因此可能有单个或多个用户,因此您必须完成循环并显示列表中可用的所有记录。为代码添加循环,而不是显示带索引的单个记录。

if(count($info['players']['list']) > 0){
    for($cnt = 0; $cnt < count($info['players']['list']); $cnt++){
        echo $info['players']['list'][$cnt]['name'];
    }
} else {
    echo "Write your message";
}

答案 3 :(得分:0)

采取以下数组(我必须更改一些内容)并转到here。将阵列粘贴在左侧,然后按右箭头并在右侧看到阵列的分析。打开树视图,您将意识到列表中有一个0索引。因此,您无法通过执行echo $info['players']['list']['name'];访问所需内容,但需要应用列表echo $info['players']['list'][0]['name'];的索引0

[{
    "status": true,
    "hostname": "{IP}",
    "port": 555,
    "queryPort": 555,
    "name": "Cod2 Server",
    "map": "mp_genesisarc",
    "secured": true,
    "password_protected": false,
    "version": "1.3",
    "protocol": "udp",
    "players": {
        "online": 1,
        "max": "28",
        "list": [
            {
                "frags": "1",
                "ping": "54",
                "name": "Mr Anderson"
            }
        ]
    },
    "cached": false
}]

答案 4 :(得分:0)

如果将json字符串粘贴到https://jsonlint.com/并单击验证JSON,您将看到有几个语法错误;即portqueryPort的值。

纠正后,你应该有这样的事情:

{
    "status": true,
    "hostname": "{IP}",
    "port": "{PORT}",
    "queryPort": "{PORT}",
    "name": "Cod2 Server",
    "map": "mp_genesisarc",
    "secured": true,
    "password_protected": false,
    "version": "1.3",
    "protocol": "udp",
    "players": {
        "online": 1,
        "max": "28",
        "list": [{
            "frags": "1",
            "ping": "54",
            "name": "Mr Anderson"
        }]
    },
    "cached": false
}

现在json已修复,您可以将其转换为数组以进行简单处理。

代码:(Demo

$serverip="localhost";
$array=json_decode(file_get_contents( 'https://use.gameapis.net/cod2/query/info/000.000.00.0:0000'.$serverip),true);
if(!isset($array['status']) || $array['status']===false){
    echo 'Offline';
}else{
    foreach($array['players']['list'] as $players){
        echo "<div>Name: {$players['name']}, Frags: {$players['frags']}, Ping: {$players['ping']}</div>\n";
    }
}

foreach()是一种更好/更清洁的做法,而不是诉诸for(),不幸的是需要count(),“计数器”变量和增量。