2012-02-22 105 views
0

我从PHP检索JSON:JSON对象输出不对

<?php 
require("includes/connection.php"); 

//$queryString = "home"; 
$returnArray = array(); 

if (!$server) 
{ 
    die('Connect Error (' . mysqli_connect_errno() . ')' . mysqli_connect_error()); 
} 


$query = "SELECT * 
      FROM stuff 
      WHERE name LIKE '%" . $queryString . "%' 
      ORDER BY name LIMIT 1"; 

if($result = $server->query($query)) 
{ 
    while ($row = $result->fetch_assoc()) 
    { 
     array_push($returnArray, $row); 

    } 


}   

echo json_encode($returnArray); 

?> 

和Javascript:

var home = "home"; 
    $.getJSON("db/getJSON.php", {queryString: ""+home+""}, 

function(data){ 

    jsn = JSON.stringify(data); 
    $("#outputtester").html(jsn); 
     consoleOut("JSON: "+jsn); 

    }); 

它输出相当不错的字符串:

[{"UID":"1","IDS":"1,2,3","name":"home","type":"thing","cat_id":"home"}] 

但我认为这两个[]不应该在那里,因为它不是数组的数组?

我试图把回声 “的东西:”。在json_encode之前,所以我可以识别数组的数组。但它不会工作

我试图访问“数据”不字符串化,作为一个对象,它应该是这样的工作:

data.UID 

data.name 

,但我得到一个对象的对象输出每一次,也当我字符串化他们..

任何想法,我做错了吗?

无法找到一大堆的信息对从JSON数组时,所有的东西我手动查找使JSON在JavaScript代码..

+1

'$ returnArray'是数组的数组,所以结果似乎是细。 '$ returnArray'是一个数组。每个'$ row'都是一个数组。您正在将'$ row'添加到'$ returnArray' - >数组数组。当然,如果你的查询只返回一个表格行,那么你最终会得到一个只包含一个数组的数组。也许你想把'$ row'分配给'$ returnArray'。 – 2012-02-22 17:39:56

+0

1)代码是SQL注入攻击敞开的,2)即JSON输出是正确的,则是编码数据的行的阵列JSON其中的行是“对象”。这里没有问题(除了查询代码)。 – Chad 2012-02-22 17:42:12

回答

1

变化:

echo json_encode($returnArray); 

要:

if($returnArray) { 
    echo json_encode($returnArray[0]); 
} else{ 
    // here echo whatever you want to signify there were no results. 
} 
+0

那如果他只是想返回的第一个结果,这使得while循环愚蠢。 – Chad 2012-02-22 17:44:09

+0

权,似乎他确实因为查询限制为1 – ggreiner 2012-02-22 17:47:42

+0

你是正确的,这整个页面需要检修。 – Chad 2012-02-22 17:48:28