首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >多维数组的JSON_ENCODE给出了不同的结果

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

Stack Overflow用户
提问于 2012-05-28 10:25:11
回答 4查看 80.8K关注 0票数 25

当在PHP语言中做一个多维数组的json_encode时,我注意到一个不同的输出,只需命名其中一个数组,而不是不命名它们。例如:

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

提供由多个json对象组成的单个数组。

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

而简单地将名称分配给中间数组

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

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

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-28 10:29:52

在JSON中,数组[]只有In有数字键,而对象{}有string属性。在第二个示例中包含数组键,必然会迫使整个外部结构成为一个对象。因为包含了字符串键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}}
票数 36
EN

Stack Overflow用户

发布于 2012-05-28 10:30:46

具有连续数字键的数组被编码为JSON数组。事情就是这样。为什么?因为这是有道理的。

由于键可以通过数组编码隐式表示,因此没有理由显式地将它们编码为对象键。

请参阅json_encode documentation中的所有示例。

票数 2
EN

Stack Overflow用户

发布于 2012-05-28 10:36:18

在第一个选项中,您只有数字索引(0、1和2)。尽管它们没有显式声明,但php会自动创建它们。

在第二种选择中,您将其中一个索引声明为字符串,这将使PHP在内部将所有索引转换为字符串。

当您对第一个数组进行json编码时,没有必要在生成的json字符串中显示整数,因为任何解码器都应该能够“猜测”它们是0、1和2。

但在第二个数组中,这是必要的,因为解码器必须知道数组中的密钥值。

这相当简单。是否未在数组中声明索引?它们是0,1,2,3等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10778741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档