Trying to parse JSON with PHP

2020-04-30 03:29发布

问题:

I'm new to php and this has really stumped me - i'm trying to parse this json in order to get the value of 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
                    }
                ]

            }
        ]

    }
}

So far I have:

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

But I'm pretty sure that's not the right way to do it at all. All I need out of this JSON file is the match id.

回答1:

You are getting an array back from json_decode() as you passed the second parameter with a value of true so you access it like any multi-dimensional array:

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

Demo

Naturally if you have multiple matches you wish to get the match ID for you can loop through $decodedmatchhistory['result']['matches'] and get them accordingly.



回答2:

This is your code:

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

Two issues. First when you set true in a call to json_decode() that returns the results as an array:

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

So you would access the data as an array like this:

$matchid = $decodedmatchhistory['match_id'];

But your original syntax is incorrect even if you were accessing the data as an object:

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

If you set json_decode() to false or even left that parameter out completely, you could do this instead:

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

So try both out & see what happens.



标签: php json parsing