json — PHP json_decode не работает

Привет, я хочу получить персональное имя пользователя 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'];

эхо пусто

5

Решение

Players это массив:

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

Другие решения

Несколько ошибок здесь.

Позвольте мне объяснить, один за другим, давая советы, чтобы найти общие ошибки в 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,

3

По вопросам рекламы [email protected]