在JSON编码中使用深度的目的是什么?

时间:2014-01-05 19:38:50

标签: php json

我有示例代码:

$array = array(

    'GiamPy' => array(
            'Age' => '18',      
            'Password' => array(
                    'password' => '1234',
                    'salt' => 'abcd',
                    'hash' => 'whirlpool'
            ),  
        'Something' => 'Else'
    )

);

echo json_encode($array, JSON_PRETTY_PRINT);

我在PHP文档中已经看到,自PHP 5.5.0(最近),json_encode允许一个新参数深度

  1. 它的目的是什么?
  2. 为什么我需要它?
  3. 为什么在PHP 5.5.0中添加了它?

1 个答案:

答案 0 :(得分:7)

该选项限制将要处理的深度(d'uh)。数组的深度是通过嵌套的深度来衡量的。这是一个深度为1的数组:

array(
    'foo',
    'bar',
    'baz'
)

这是一个深度为2的数组:

array(
    array(
        'foo'
    ),
    array(
        'bar'
    ),
    array(
        'baz'
    )
)

// ------ depth ------>

如果输入超过最大深度(默认为512),json_encode将只返回false

为什么你可能会使用它是有争议的,你可能想要保护自己免受无意的无限递归或太多的资源使用。深度超过512级可能的数组具有无限递归引用,无法序列化。但是,如果您确定您的数组不是无限递归但是深度超过512,您可能希望明确地增加此限制。您可能还希望将限制降低为简单的错误捕获器;假设您希望结果具有最大深度,但您的输入数据可能有些不可预测。