我正在尝试Json解码一些东西并获得我想要的价值。 但我得到PHP未定义的索引错误。 这是我的代码。
<?php
$json = '[{"totalGamesPlayed":25,"championId":0}]';
$data = json_decode($json,true);
$games = $data['totalGamesPlayed'];
echo $games;
?>
问题是“[”“]”正在弄乱我的代码...... 我正在使用API来获取一些值。 我得到的是:http://pastebin.com/XrqkAbJf 我需要totalGamesPlayed,冠军ID除零(82,106和24) 以及这些ID的TOTAL_SESSIONS_WON和TOTAL_SESSIONS_LOST ...... 首先,让我们找出如何绕过“[”和“]”符号,然后事情可能会更容易.. 提前谢谢!
答案 0 :(得分:4)
像这样访问您的代码
$games = $data[0]['totalGamesPlayed'];
获取其他信息的代码
<?php
$json = 'PUT YOUR EXAMPLE JSON HERE';
$data = json_decode($json,true);
$seasonWon = 0;
$seasonPlayed = 0;
foreach($data as $stats) {
if($stats['championId'] != 0) {
echo '<br><br>Total Games Played:'. $stats['totalGamesPlayed'];
echo '<br>champion Ids :'.$stats['championId'];
foreach($stats['stats'] as $stat) {
if($stat['statType'] == 'TOTAL_SESSIONS_WON') {
$seasonWon = $stat['value'];
echo '<br>TOTAL_SESSIONS_WON :'.$seasonWon;
}
if($stat['statType'] == 'TOTAL_SESSIONS_LOST')
echo '<br>TOTAL_SESSIONS_LOST :'.$stat['value'];
if($stat['statType'] == 'TOTAL_SESSIONS_PLAYED') {
$seasonPlayed = $stat['value'];
echo '<br>TOTAL_SESSIONS_PLAYED :'.$seasonPlayed;
}
}
echo '<br>Games Ratio(TOTAL_SESSIONS_WON / TOTAL_SESSIONS_PLAYED): ('. $seasonWon.'/'.$seasonPlayed.'):'. ($seasonWon/$seasonPlayed);
}
}
答案 1 :(得分:1)
你试试这个:
$games = $data[0]['totalGamesPlayed'];
问题是你的json是一个数组,第一个元素是一个对象
答案 2 :(得分:1)
如果您遇到类似问题,可以方便地查看解码数据的真实情况。因此,不要盲目阅读,请使用print_r()
或var_dump()
。 print_r($data);
会输出:
Array
(
[0] => Array
(
[totalGamesPlayed] => 25
[championId] => 0
)
)
因此正确的“路径”是:
$games = $data[0]['totalGamesPlayed'];
就是这样,因为你的JSON对象是数组(JSON的第一个和最后一个字符是[
和]
),对象是数组节点({{1} } / {
)并且您的真实值是该对象的成员。您可以修复,通过检查为什么您首先以这种方式构造JSON(可能代码允许更多的数组元素),或者“提取”对象以摆脱被迫使用{{1}在参考文献中:
}
和[0]
会给出:
$data = $data[0];
$games = $data['totalGamesPlayed'];
以前的代码将开始运作:
print_r($data)
给出
Array
(
[totalGamesPlayed] => 25
[championId] => 0
)