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 数组,生成如下字符串:

[
{
"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将数组编码为数组?

192609 次浏览

JSON中的 Array是索引数组 只有,所以您要获得的结构是无效的 Json/Javascript。

PHP 关联数组是 JSON 中的对象,因此除非您不需要索引,否则不能进行这样的转换。

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

$indexedOnly = array();


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


json_encode($indexedOnly);

将返回类似于:

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

参见 RFC8259JSON (JSON)数据交换格式中的 阵列:

数组结构表示为围绕零的方括号 或多个值(或元素)。元素用逗号分隔。

Array = start-array [ value * (value-慕名值)] end-array

您正在观察这种行为,因为您的数组不是顺序的-它有键 02,但没有 1作为键。

只有数字索引是不够的。如果 PHP 数组是顺序的,也就是说,如果它的键是0,1,2,3,... ,那么 json_encode只会将 PHP 数组编码为 JSON 数组。

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

echo json_encode(array_values($input)).

试试这个,

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