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将所有属性转换为数组(顺序或不)