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编码我的数组,而不是? 
 您正在观察此行为,因为您的数组不是顺序的 – 它具有键0和2 ,但不具有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将所有属性转换为数组(顺序或不)