Привет, я хочу получить персональное имя пользователя Steam
Я храню данные в файлах в формате .json.
{
"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"}
]
}
}
И я хочу получить personaname для переменной, но она ничего не делает, переменная пуста
я думаю, что json_decode не работает, но я действительно не знаю.
$pname = json_decode(file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v002/?key=KEYCONSORED&Steamids={$_SESSION['T2SteamID64']}"));
echo $pname['response']['players']['personaname'];
эхо пусто
Players это массив:
$pname['response']['players'][0]['personaname'];
Несколько ошибок здесь.
Позвольте мне объяснить, один за другим, давая советы, чтобы найти общие ошибки в PHP JSON декодирования / кодирования.
Во-первых, ваш JSON недействителен, в нем отсутствует окончание }
в конце.
Обновить: сразу после комментария @tftd я увидел, что вы неправильно форматировали свой код, но в любом случае позвольте мне объяснить, как находить проблемы, потому что это не тривиально, как должно быть в PHP. Другие ошибки все еще являются действительными.
Чтобы проверить, почему не работает json_decode, используйте json_last_error
: он вернет номер ошибки, что означает:
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"
В вашем случае это возвращалось 4
, Итак, я пошел проверить ваш JSON в http://jsonlint.com и я нашел пропавший }
в конце.
Если вы хотите получить доступ к одному $pname
как массив, вам нужно, чтобы ваш шанс json_decode
линия к:
$pname = json_decode(file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v002/?key=KEYCONSORED&Steamids={$_SESSION['T2SteamID64']}"), true);
Обратите внимание на последний параметр, true
для json_decode
метод. По словам документация, когда true
Возвращенные объекты будут преобразованы в ассоциативные массивы.
Исправил ваш JSON и json_decode
позвоните, мы можем видеть players
это массив. Итак, если вы хотите прочитать первый плеер, используйте:
$pname['response']['players'][0]
Я не читаю с URL, поэтому я использовал 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'];
Это будет выводить, как и ожидалось, UareBugged
,