如何让 Symfony 将空的关联数组序列化为空的 JSON 对象?

How can I make Symfony serialize empty associative arrays as empty JSON objects?

我需要使用 Symfony 将一组 PHP 关联数组序列化为 JSON。其中一些数组恰好是空的。

这意味着所有包含数据的数组将被序列化为 JSON 个对象,而所有空数组将被序列化为 JSON 个空数组。因为我想避免必须检查某个东西是对象还是数组,所以我希望我的所有数组(是否为空)都序列化为 JSON 对象,而不是数组。

如何使用 Symfony 2 实现此目的?

Symfony 2 允许您将上下文传递给序列化程序,您可以在其中设置序列化选项。我在官方文档中找不到这个,但是在查看源代码时看到了它。

为了将空的 PHP 数组序列化为空的 JSON 对象,您需要将标志传递给 json_encode(这是 Symfony JSON 编码器使用的) .您可以传递任意标志,基本上是 json_encode 接受的所有选项。

它是这样工作的:

$serializer->serialize($myObject, "json", ["json_encode_options" => JSON_FORCE_OBJECT])

从 Symfony 4.4 开始,有一个新选项 preserve_empty_objects 可以帮助您 - 如果您可以先将空数组转换为空对象:

$array = ['foo' => new stdClass()];
$serializer->serialize($array, "json", ["preserve_empty_objects" => true]);
// {'foo': {}}