json_encode将PHP数组作为JSON数组稀疏,而不是JSON对象

我在PHP中有以下数组:

Array ( [0] => Array ( [id] => 0 [name] => name1 [short_name] => n1 ) [2] => Array ( [id] => 2 [name] => name2 [short_name] => n2 ) ) 

我想JSON将其编码为JSON数组,产生如下所示的string:

 [ { "id":0, "name":"name1", "short_name":"n1" }, { "id":2, "name":"name2", "short_name":"n2" } ] 

但是,当我在这个数组上调用json_encode时,我得到以下内容:

 { "0":{ "id":0, "name":"name1", "short_name":"n1" }, "2":{ "id":2, "name":"name2", "short_name":"n2" } } 

这是一个对象而不是一个数组。

我怎么能得到json_encode编码我的数组,而不是?

您正在观察此行为,因为您的数组不是顺序的 – 它具有键02 ,但不具有1作为键。

只有数字索引是不够的。 json_encode只会将你的PHP数组编码为一个JSON数组,如果你的PHP数组是连续的 – 也就是说,如果它的键是0,1,2,3 …

您可以使用array_values函数按顺序重新索引数组,以获得所需的行为。 例如,下面的代码在您的用例中成功运行:

 echo json_encode(array_values($input)). 

JSON中的数组只是索引数组,所以你试图得到的结构是无效的JSON / Javascript。

PHP的Associatives数组是JSON中的对象,所以除非你不需要索引,否则你不能做这样的转换。

如果你想得到这样的结构,你可以这样做:

 $indexedOnly = array(); foreach ($associative as $row) { $indexedOnly[] = array_values($row); } json_encode($indexedOnly); 

会返回类似于:

 [ [0, "name1", "n1"], [1, "name2", "n2"], ] 

尝试这个,

 <?php $arr1=array('result1'=>'abcd','result2'=>'efg'); $arr2=array('result1'=>'hijk','result2'=>'lmn'); $arr3=array($arr1,$arr2); print (json_encode($arr3)); ?> 

json_decode($ jsondata,true);

true将所有属性转换为数组(顺序或不)