具有空值的json_decode剥离键

时间:2019-01-16 22:59:11

标签: php arrays json laravel

我有一个Laravel应用,该应用在Controller函数中:

$extraDataStr = (string) $request->input('extraData');
$extraData = json_decode($extraDataStr, true);

但是,即使$extraDataStr是有效的JSON(如Xdebug中所示),$ extraData也会成为仅包含在$extraDataStr中具有非空值的键的数组。这没有任何意义。

我以为我失去了理智,所以我甚至写了一个json_decode的测试:

$extraDataStr = json_encode([
    'willBeNull' => null,
    'hasVal' => 4
]);
$extraDataArr = json_decode($extraDataStr, true);
$this->assertEquals(['willBeNull', 'hasVal'], array_keys($extraDataArr));
$this->assertNull($extraDataArr['willBeNull']);

当然可以。

因此,我从测试中取出了同一行,并将其临时插入到Controller函数中,只是为了看看它是否会删除空值:

$extraDataStr = json_encode([
    'willBeNull' => null,
    'hasVal' => 4
]);
$extraData = json_decode($extraDataStr, true);

即使我使用此基本json_encoded字符串而不是用户输入,这也会错误地忽略具有空值的键!

到底是怎么回事?

P.S。这与php json_decode removing attributes with null value的问题不同,因为我已经展示了可以通过的测试以及失败的确切代码。

0 个答案:

没有答案