Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-json_encode()中的错误_Php_Json - Fatal编程技术网

PHP-json_encode()中的错误

PHP-json_encode()中的错误,php,json,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++; }

问题:返回数组,但不是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);

无需使用
$i++直接使用

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

它将返回JSON,您的代码非常好-您只是误解了JavaScript中数组和对象之间的不同

[{"ID":"4","NAME":"asdasd"},
 {"ID":"3","NAME":"LOKS"},
 {"ID":"1","NAME":"LOL"}]
这是一个包含三个元素的数组的JSON。每个元素都是一个具有属性
ID
NAME
的对象

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

for(var i = 0; i < data.length; i++) {
    var row = data[i];
    // Here you can use row.ID and row.NAME
}
这实际上是不好的,因为JavaScript中的对象没有排序(尽管它们实际上在大多数浏览器中,但这不能保证!)。因此,当迭代此类元素中的行时(使用
for(var-key-in-data)
),您不一定会首先得到ID=4的行,因为它的键为零

但是,如果出于某种原因(您不需要!)确实需要对象而不是数组,则始终可以将数组强制转换为对象:

echo json_encode((object)$json_values);
作为旁注,出于安全原因,在JSON中使用对象作为顶级元素通常是一个好主意(您可以重新定义数组构造函数,然后使用带有脚本标记的顶级数组包含某些内容,因此,如果通过XHR请求访问数据,则访问通常受同源策略保护的数据),因此,我将更改PHP代码如下:

{
    0: {"ID":"4","NAME":"asdasd"},
    1: {"ID":"3","NAME":"LOKS"},
    2: {"ID":"1","NAME":"LOL"}
}
echo json_encode(array('rows' => $json_values));

你到底有什么问题?代码看起来非常好。问题:返回数组,但不是json格式。如果我取出变量“$I”作为键,它将返回json,但如果我使用“$I”作为键,它将返回数组,但不在JSONC中,请包含实际和所需的输出?您想在这里阅读javascript中的关联数组:那么这到底是怎么回事?它是一个数组,包含行的对象(如关联数组)。这正是你想要的,不是吗?您可以使用for循环对行进行迭代:
for(var i=0;i
-实际上,对于顶级元素,获取数组而不是对象很重要,因为对象键在JavaScript中没有顺序。因此,如果行未存储在数组中,则无法确保它们与从数据库接收到的行的顺序相同。无需使用$i++;-真的!但是仍然没有json!我发现问题出在$json_值键上!很抱歉,我造成了很大的混乱-我没有解释我的问题,以及我需要的。新来的家伙……)无论如何,在你的帖子之后,我意识到了我真正的问题——对象。所以我找到了解决问题的办法!echo json_encode($json_值,json_FORCE_对象);你确定你想要吗?除非使用行id作为键,否则使用对象而不是数组没有多大意义!