Mehrere Fehler hier.
Lassen Sie mich erklären, eins nach dem anderen geben Tipps, um häufige Fehler in PHP JSON Decodierung/Codierung zu finden.
1. Ungültige JSON
Zuerst Ihre JSON ist ungültig, es eine Endung }
am Ende fehlt.
Update: kurz nach @tftd Kommentar Ich sah Sie falsch formatiert Ihren Code, aber trotzdem, lassen Sie mich erklären, wie Sie Probleme finden, denn das ist nicht trivial wie es in PHP sein sollte. Die anderen Fehler sind immer noch gültig.
Um zu überprüfen, warum json_decode nicht funktioniert, verwenden json_last_error
: es wird eine Fehlernummer zurückgeben, was bedeutet:
0 = JSON_ERROR_NONE = "No error has occurred"
1 = JSON_ERROR_DEPTH = "The maximum stack depth has been exceeded"
2 = JSON_ERROR_STATE_MISMATCH = "Invalid or malformed JSON"
3 = JSON_ERROR_CTRL_CHAR = "Control character error, possibly incorrectly encoded"
4 = JSON_ERROR_SYNTAX = "Syntax error"
5 = JSON_ERROR_UTF8 = "Malformed UTF-8 characters, possibly incorrectly encode"
6 = JSON_ERROR_RECURSION = "One or more recursive references in the value to be encoded"
7 = JSON_ERROR_INF_OR_NAN = "One or more NAN or INF values in the value to be encoded"
8 = JSON_ERROR_UNSUPPORTED_TYPE = "A value of a type that cannot be encoded was given"
In Ihrem Fall, es 4
zurückkehrte. Also, ich habe deine JSON um http://jsonlint.com validiert und ich fand die fehlende }
am Ende.
2. json_decode Objekte zurückgibt, nicht
Arrays Wenn Sie ein $pname
als Array zugreifen möchten, müssen Sie Ihre json_decode
Linie dem Zufall:
$pname = json_decode(file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v002/?key=KEYCONSORED&Steamids={$_SESSION['T2SteamID64']}"), true);
Hinweis der letzte Parameter, true
für die json_decode
Methode. Entsprechend der documentation, wenn true
zurückgegebene Objekte in assoziative Arrays konvertiert werden.
3. Spieler ist ein Array
Ihre JSON Feste und json_decode
Anruf, können wir players
ist ein Array sehen. Also, wenn Sie den ersten Spieler lesen möchten, verwenden Sie:
$pname['response']['players'][0]
Festcode
Ich bin nicht von einer URL zu lesen, so habe ich eine heredoc:
<?php
$content = <<<EOD
{
"response": {
"players": [
{
"steamid": "76561198137714668",
"communityvisibilitystate": 3,
"profilestate": 1,
"personaname": "UareBugged",
"lastlogoff": 1418911040,
"commentpermission": 1,
"profileurl": "http://steamcommunity.com/id/uarenotbest/",
"avatar": "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/da/daece8a16d866ef9bd03ddc4aa365c5862af1c21.jpg",
"avatarmedium": "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/da/daece8a16d866ef9bd03ddc4aa365c5862af1c21_medium.jpg",
"avatarfull": "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/da/daece8a16d866ef9bd03ddc4aa365c5862af1c21_full.jpg",
"personastate": 1,
"realname": "Michal Šlesár",
"primaryclanid": "103582791436765601",
"timecreated": 1400861961,
"personastateflags": 0,
"loccountrycode": "SK",
"locstatecode": "08"
}
]
}
}
EOD;
$pname = json_decode($content, true);
echo $pname['response']['players'][0]['personaname'];
Dies wird ausgegeben , wie erwartet, UareBugged
.
Was zeigt 'var_dump ($ pname);'? –
print_r ($ pname); macht Anthing? –
print_r (json_decode ($ pname, true)); und $ pname ['Antwort'] ['Spieler'] [0] ['Personaname']; –