试图用PHP解析JSON

时间:2014-05-09 15:46:01

标签: php json parsing

我是php的新手,这真的让我难过 - 我正在尝试解析这个json以获得match_id的价值。

{
    "result": {
        "status": 1,
        "num_results": 1,
        "total_results": 500,
        "results_remaining": 499,
        "matches": [
            {
                "match_id": 649218382,
                "match_seq_num": 588750904,
                "start_time": 1399560988,
                "lobby_type": 0,
                "players": [
                    {
                        "account_id": 4294967295,
                        "player_slot": 0,
                        "hero_id": 69
                    }
                ]

            }
        ]

    }
}

到目前为止,我有:

$matchhistoryjson = file_get_contents($apimatchhistoryurl);
$decodedmatchhistory = json_decode($matchhistoryjson, true);
$matchid = $decodedmatchhistory->{'match_id'};

但我很确定这根本不是正确的做法。我需要的所有JSON文件都是匹配ID。

2 个答案:

答案 0 :(得分:2)

当您传递第二个参数且值为json_decode()时,您正从true获取一个数组,因此您可以像任何多维一样访问它 阵列:

$matchhistoryjson = file_get_contents($apimatchhistoryurl);
$decodedmatchhistory = json_decode($matchhistoryjson, true);
echo $decodedmatchhistory['result']['matches'][0]['match_id'];

Demo

当然,如果您有多个匹配项,您希望获得匹配ID,您可以循环浏览$decodedmatchhistory['result']['matches']并相应地获取它们。

答案 1 :(得分:0)

这是你的代码:

$matchhistoryjson = file_get_contents($apimatchhistoryurl);
$decodedmatchhistory = json_decode($matchhistoryjson, true);
$matchid = $decodedmatchhistory->{'match_id'};

两个问题。首先,在调用json_decode()时设置true,将结果作为数组返回:

When TRUE, returned objects will be converted into associative arrays.

所以你可以像这样的数组访问数据:

$matchid = $decodedmatchhistory['match_id'];

但即使您将数据作为对象访问,原始语法也不正确:

$matchid = $decodedmatchhistory->{'match_id'};

如果您将json_decode()设置为false,或者甚至将该参数完全删除,则可以改为:

$decodedmatchhistory = json_decode($matchhistoryjson);
$matchid = $decodedmatchhistory->match_id;

所以试试看& amp;看看会发生什么。