2014-12-18 16 views
5

Hallo ich möchte die Personaname von Steam Benutzer Ich habe gespeicherte Daten in Dateien im Format .json.PHP json_decode funktioniert nicht

{ 
"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" 
     } 
    ] 

} 

}

und ich möchte die personaname zu Variable bekommen, aber es nichts zu tun, Variable leer ich denke json_decode doesn `t Arbeit, aber ich weiß wirklich nicht.

$pname = json_decode(file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v002/?key=KEYCONSORED&Steamids={$_SESSION['T2SteamID64']}")); 
    echo $pname['response']['players']['personaname']; 

Echo ist leer

+2

Was zeigt 'var_dump ($ pname);'? –

+1

print_r ($ pname); macht Anthing? –

+0

print_r (json_decode ($ pname, true)); und $ pname ['Antwort'] ['Spieler'] [0] ['Personaname']; –

Antwort

9

Spieler ist ein Array:

$pname['response']['players'][0]['personaname']; 
3

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.

+1

Nur eine Anmerkung - der JSON ist gültig, der Benutzer hat es nicht richtig formatiert. Das fehlende '}' steht außerhalb der Formatierung. – tftd

+1

@tftd, fair genug (ich gab Ihnen eine +1). Aber die anderen Fehler sind immer noch gültig. Und ich werde den ungültigen JSON reden lassen, denn diese Art von Fehlern zu finden ist nicht offensichtlich und sollte es auch sein. –

+1

Ja, das ist normalerweise leicht zu übersehen. :) – tftd

Verwandte Themen