PHP - json_encode()中的错误

时间:2012-05-03 09:08:05

标签: php json

问题:返回数组,但不是json。

结果:必须返回数组中的数组。外部数组具有带数字的键,值是带有“ID”和“NAME”键的数组,并且数据库是从数据库中分配的。

$i = 0;
$json_values = array();
while($sctg = mysql_fetch_assoc($get_sctg)){
    $json_values[$i] = array("ID" => $sctg['ID'], "NAME" => $sctg['NAME']);
    $i++;
}
echo json_encode($json_values);

2 个答案:

答案 0 :(得分:1)

你的代码非常好 - 你只是误解了JavaScript中数组和对象之间的差异。

[{"ID":"4","NAME":"asdasd"},
 {"ID":"3","NAME":"LOKS"},
 {"ID":"1","NAME":"LOL"}]

这是包含具有三个元素的数组的JSON。每个元素都是一个具有属性IDNAME的对象。

我们假设数组存储在data中。您可以使用简单的for循环迭代该数组中的对象:

for(var i = 0; i < data.length; i++) {
    var row = data[i];
    // Here you can use row.ID and row.NAME
}

我猜你希望你的JSON看起来像这样:

{
    0: {"ID":"4","NAME":"asdasd"},
    1: {"ID":"3","NAME":"LOKS"},
    2: {"ID":"1","NAME":"LOL"}
}

这实际上是错误,因为JavaScript中的对象没有排序(即使它们实际上在大多数浏览器中,但是不能保证!)。因此,当迭代这样一个元素中的行时(使用for(var key in data)),你不一定会得到ID = 4的行,因为它的键是零。

但是,如果你真的想要一个对象而不是一个数组(你没有!),你总是可以将数组转换为对象:

echo json_encode((object)$json_values);

作为附注,出于安全原因,通常最好将对象作为JSON中的顶级元素(您可以重新定义数组构造函数,然后包含带有脚本标记的顶级数组)因此访问数据通常受到相同原始策略的保护(如果它是由XHR请求访问的),所以我将改变这样的PHP代码:

echo json_encode(array('rows' => $json_values));

答案 1 :(得分:0)

无需直接使用$i++;

while($sctg = mysql_fetch_assoc($get_sctg)){
    $json_values[] = array("ID" => $sctg['ID'], "NAME" => $sctg['NAME']);    
}

它将返回JSON