PHP:从数据库中提取JSON数据并显示它

时间:2013-05-03 14:49:54

标签: php json

我正在使用https://sourceforge.net/p/wowarmoryapi/home/Home/的php库。它从battle.net中提取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>"; }

看起来像这样减去错误,这来自另一个代码: pink text is the dump

我尝试了各种方法,主要是从这个网站以一种易于阅读的方式显示我的数据,但我总是得到错误。

  1. 这绝对是一个对象。 if (is_object($data)) { echo "yay!"; }&lt; - 此作品
  2. 一旦我使用$decodedjson = json_decode($data);它不再是一个对象,我似乎无法打印结果以查看它的外观。 var_dump($ decodingjson)返回NULL
  3. 最后,当我使用以下代码时:

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

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

    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>"; }  } 
    

    新错误

    NULL NULL

2 个答案:

答案 0 :(得分: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>";
}

答案 1 :(得分:0)

你需要首先转换json字符串,我不确定你期望从DB中有多少行,但如果它只是一行你不需要循环:

$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>";
}