在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}