【问题标题】:How can I make Symfony serialize empty associative arrays as empty JSON objects?如何让 Symfony 将空关联数组序列化为空 JSON 对象?
【发布时间】:2015-02-05 15:40:54
【问题描述】:

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

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

如何使用 Symfony 2 实现这一点?

【问题讨论】:

    标签: php symfony serialization


    【解决方案1】:

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

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

    它是这样工作的:

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

    【讨论】:

    • 但是如果 $myObject 也有像 ['lol', 'foo'] 这样的好数组,那么它将被转换为丑陋的 {"0": "lol", "1": "foo"}
    • @errogaht 确实,但这不是关联数组。
    • 理想的解决方案是: 1. 将空数组序列化为 {} 2. 将非空的真实数组序列化为数组 [1,2,3,4] 3. 一段代码用于所有类型应用程序,但我认为这是不可能的:(
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2014-01-19
      • 2021-11-16
      • 1970-01-01
      • 2018-11-25
      • 2021-05-29
      相关资源
      最近更新 更多