【问题标题】:Force Serializer Symfony to return an array instead of an object强制 Serializer Symfony 返回一个数组而不是一个对象
【发布时间】:2016-03-06 23:04:30
【问题描述】:

有我的功能:

private function responseJson($datas, $code)
{
    $serializer = $this->container->get('jms_serializer');
    $context = new SerializationContext();
    $context->setSerializeNull(true);
    $response = new Response($serializer->serialize($datas, 'json', $context->enableMaxDepthChecks()), $code);
    $response->headers->set('Content-Type', 'application/json');
    return $response;
}

我使用 symfony 的序列化程序组件。这就是我调用这个函数时我的服务器所做的。客户端需要一个数组,但服务器返回一个对象。是否可以强制返回一个数组?

感谢您的回答!

【问题讨论】:

标签: arrays symfony object serialization


【解决方案1】:

根据我在JsonSerializationVisitor 中读到的内容,实际编码是使用json_encode 完成的:

$result = @json_encode($this->getRoot(), $this->options);

正如我在this post 中看到的那样,无法使用 json_encode 强制创建数组。

如果您的输入数据是一个没有索引的数组,那么 json_encode 将生成一个数组。这意味着如果数据中的键名很重要,则不能将数组返回给客户端。

【讨论】:

  • 好的,我再次考虑给出的结果,并且有键。正如您所说,客户端无法获取数组。所以我尝试使用array_values($datas) 删除密钥,但它不起作用。
  • 我在 Symfony 2.7.7 中创建了一个快速项目,安装了 jms/serializer-bundle 并将您的代码粘贴到控制器中。我已经给该控制器三个不同的数组,用 array_values 处理。你可以see the code here。无论我选择哪个数组,我总是得到一个数组作为响应。我无法想象你的 $datas 数组会导致响应成为一个对象,但也许你可以举一个例子来说明它的样子?
  • 感谢您所做的一切。如果 $datas 已经是一个对象而不是一个数组会发生什么?它会返回一个对象,对吗?
  • 是的,它会的。为了从json_encode 中得到一个数组,你必须有一个没有索引的数组作为输入。
猜你喜欢
  • 1970-01-01
  • 2016-05-03
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2017-05-29
  • 1970-01-01
相关资源
最近更新 更多