0

我正在使用来自https://sourceforge.net/p/wowarmoryapi/home/Home/的 php 库。它从战网中提取 json 数据并出于缓存原因将其存储在我的数据库中。

从 db 获取 json 的代码(我不确定此时是否仍将其视为 json):

$data = $con->query('SELECT Data FROM wa_guilds');

我使用以下代码查看数据:

foreach($data as $row) {        
    echo "<span style='color:#ff0099'>";
    var_dump($row);
    echo "</span>"; }

看起来像这样减去错误,这是来自另一个代码: 粉红色的文字是转储

我尝试了各种方法,主要来自这个站点,以一种易于阅读的方式显示我的数据,但我总是出错。

  1. 这绝对是一个对象。if (is_object($data)) { echo "yay!"; }<--这行得通
  2. 一旦我使用$decodedjson = json_decode($data);它就不再是一个对象,我似乎无法打印结果来查看它的样子。var_dump($decodedjson) 返回 NULL

最后,当我使用以下代码时:

foreach ($data as $da){     
    echo $da['Data']['character']['name'];  }

返回警告:非法字符串偏移 'character'

和:

foreach ($data as $da){     
    echo $da['character']['name'];  }

返回注意:未定义索引:字符

我不明白我做错了什么,或者正确。我是否需要以某种方式将 $data 转换为字符串?

新代码

$sth = $con->query('SELECT Data FROM wa_guilds');
$sth->execute();    
$data = $sth->fetchAll(PDO::FETCH_ASSOC);
foreach($data as $row) {
    foreach($row as $r) {
        $myData = json_decode($r, true);
        echo "<span style='color:#ff0099'>";
        var_dump($myData['Data']); 
        echo "</span>"; }  } 

新错误

空空

4

2 回答 2

1

从警告中我猜你正在使用 PDO。如果$con您的 PDO 实例代表与数据库的连接,请尝试以下操作:

$sth = $con->prepare('SELECT Data FROM wa_guilds');
$sth->execute();

$data = $sth->fetchAll(PDO::FETCH_ASSOC);

foreach($data as $row) {
    $myData = json_decode($row['Data'], true);
    echo "<span style='color:#ff0099'>";
    // $myData should now be a PHP array which you can access easily
    print_r($myData);
    echo "</span>";
}
于 2013-05-03T15:21:56.480 回答
0

您需要先转换 json 字符串,我不确定您希望从数据库中获得多少行,但如果它只是一个,则不需要循环:

$data = $sth->fetchAll(PDO::FETCH_ASSOC);

$decoded = json_decode($data['Data'], true);

echo "<span style='color:#ff0099'>";
var_dump($decoded);
echo "</span>";

如果你需要一个循环,它应该像这样工作:

foreach($data as $d)
{
    $decoded = json_decode($d['Data'], true);

    echo "<span style='color:#ff0099'>";
    var_dump($decoded);
    echo "</span>";
}
于 2013-05-03T15:29:49.107 回答