多维数组的JSON_ENCODE给出不同的结果

dan*_*gel 21 php arrays json

在PHP中执行json_encode多维数组时,我只是通过命名其中一个数组来注意不同的输出,而不是命名它们.例如:

$arrytest = array(array('a'=>1, 'b'=>2),array('c'=>3),array('d'=>4));
json_encode($arrytest)
Run Code Online (Sandbox Code Playgroud)

给出一个包含多个json对象的数组

[{"a":1,"b":2},{"c":3},{"d":4}];
Run Code Online (Sandbox Code Playgroud)

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

$arrytest = array(array('a'=>1, 'b'=>2),"secondarray"=>array('c'=>3),array('d'=>4));
json_encode($arrytest)
Run Code Online (Sandbox Code Playgroud)

创建一个内部有多个json对象的json对象

{"0":{"a":1,"b":2},"secondarray":{"c":3},"1":{"d":4}};
Run Code Online (Sandbox Code Playgroud)

为什么第一个选项不会返回与第二个execpt相同的结果,而"1"代替"secondarray"

Mic*_*ski 31

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

如果您要JSON_FORCE_OBJECT在第一个示例中使用该选项,则应该返回与第二个示例类似的结构,外部结构是对象而不是数组.在没有指定您希望它作为对象的情况下,外部数组中缺少字符串键会导致PHP假定它将被编码为JSON中的等效数组结构.

$arrytest = array(array('a'=>1, 'b'=>2),array('c'=>3),array('d'=>4));

// Force the outer structure into an object rather than array
echo json_encode($arrytest , JSON_FORCE_OBJECT);

// {"0":{"a":1,"b":2},"1":{"c":3},"2":{"d":4}}
Run Code Online (Sandbox Code Playgroud)

  • 那么为什么称它为JAVASCRIPT OBJECT NOTATION,如果它与Javascript无关. (5认同)
  • 是的,现在看起来我觉得那很愚蠢.作为参考,有人说JSON与Javascript无关. (2认同)