2014-12-18 19 views
5

Xin chào, tôi muốn nhận được personaname của người dùng hơi nước Tôi có dữ liệu được lưu trữ trong các tệp ở định dạng .json.PHP json_decode doesn`t làm việc

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

} 

}

Và tôi muốn để có được những personaname để biến nhưng nó không làm gì cả, biến rỗng tôi nghĩ rằng công việc doesn `t json_decode nhưng tôi thực sự không biết.

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

echo là trống

+2

'var_dump ($ pname);' hiển thị là gì? –

+1

print_r ($ pname); không phản ứng? –

+0

print_r (json_decode ($ pname, true)); và $ pname ['response'] ['players'] [0] ['personaname']; –

Trả lời

9

chơi là một mảng:

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

Một số lỗi ở đây.

Hãy để tôi giải thích từng cái một để đưa ra các mẹo để tìm các lỗi phổ biến về giải mã/mã hóa JSON PHP.

1. Invalid JSON

Thứ nhất, JSON của bạn là không hợp lệ, nó còn thiếu một } kết thúc ở cuối.

Cập nhật: chỉ sau @tftd bình luận Tôi thấy bạn đã định dạng mã sai, nhưng dù sao, hãy để tôi giải thích cách tìm vấn đề, vì điều này không tầm thường như trong PHP. Các lỗi khác vẫn là lỗi hợp lệ.

Để kiểm tra lý do tại sao json_decode không hoạt động, sử dụng json_last_error: nó sẽ trả lại một số lỗi, có nghĩa là:

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" 

Trong trường hợp của bạn, nó đã trở 4. Vì vậy, tôi đã xác thực JSON của bạn tại http://jsonlint.com và tôi thấy số thiếu } ở cuối.

2. json_decode trả về đối tượng, không mảng

Nếu bạn muốn truy cập vào một $pname như mảng, bạn cần phải có cơ hội dòng json_decode của bạn để:

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

Lưu ý các tham số cuối cùng, true cho json_decode. Theo số documentation, khi true, các đối tượng được trả về sẽ được chuyển đổi thành các mảng kết hợp.

3. người chơi là một mảng

Cố định JSON của bạn và json_decode cuộc gọi, chúng ta có thể thấy players là một mảng. Vì vậy, nếu bạn muốn đọc các cầu thủ đầu tiên, sử dụng:

$pname['response']['players'][0] 

cố định Mã

Tôi không đọc từ một URL, vì vậy tôi sử dụng một 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']; 

chí đầu ra này , như mong đợi, UareBugged.

+1

Chỉ cần một lưu ý - json là hợp lệ, người dùng không định dạng chính xác. Thiếu '}' nằm ngoài định dạng. – tftd

+1

@tftd, đủ công bằng (tôi đã cung cấp cho bạn +1). Nhưng các lỗi khác vẫn còn hợp lệ. Và tôi sẽ tiếp tục nói chuyện json không hợp lệ, bởi vì tìm thấy loại lỗi đó là không rõ ràng và nó nên được. –

+1

Có, điều đó thường dễ bị bỏ qua. :) – tftd

Các vấn đề liên quan