给出不同结果的多维数组的JSON_编码

在PHP中对多维数组进行json_编码时,我注意到一个不同的输出,只需命名其中一个数组,而不是不命名它们。例如:

$arrytest=数组(数组('a'=>1,'b'=>2)、数组('c'=>3)、数组('d'=>4));
json_编码($arrytest)

提供多个json对象的单个数组

[{a:1,“b:2},{c:3},{d:4}];

而只需为中间数组指定一个名称

$arrytest=array(数组('a'=>1,'b'=>2),“secondarray”=>数组('c'=>3),数组('d'=>4));
json_编码($arrytest)

创建一个json对象,其中包含多个json对象

{“0”:{“a”:1,“b”:2},“secondarray”:{“c”:3},“1”:{“d”:4};

为什么第一个选项不返回与第二个执行选项相同的结果,并用“1”代替“secondarray”

在JSON中,数组[]只有每个数组都有数字键,而对象{}有字符串属性。在第二个示例中包含数组键会强制整个外部结构成为一个对象。由于包含了字符串键a、b、c、d,两个示例的内部对象都被设置为对象

如果要在第一个示例中使用JSON\u FORCE\u OBJECT选项,则应该返回与第二个示例类似的结构,外部结构是对象而不是数组。如果不指定要将其作为对象,则外部数组中缺少字符串键会导致PHP假定它将被编码为JSON中的等效数组结构

$arrytest=数组(数组('a'=>1,'b'=>2)、数组('c'=>3)、数组('d'=>4));
//将外部结构强制放入对象而不是数组中
echo json_encode($arrytest,json_FORCE_OBJECT);
//{“0”:{“a”:1,“b”:2},“1”:{“c”:3},“2”:{“d”:4}

发表评论