Symfony2序列化实体从输出中转义反斜杠

时间:2016-02-22 09:06:45

标签: php json symfony serialization

您好我正在使用Symfony2作为我的应用程序。我正在使用序列化程序组件。

    $encoder = new JsonEncoder();
    $normalizer = new GetSetMethodNormalizer();

    $callback = function ($dateTime) {
        return $dateTime instanceof \DateTime
            ? $dateTime->format(\DateTime::ISO8601)
            : '';
    };

    $normalizer->setCallbacks(array('matchAStartTime' => $callback, 'matchBStartTime'=> $callback, 'matchDate'=> $callback));
    $normalizer->setIgnoredAttributes(array('createdAt', 'updatedAt'));
    $serializer = new Serializer(array($normalizer), array($encoder));
    $json = $serializer->serialize($entity, 'json');

但在输出中我有这样的回应:

\"id\":1,\"matchAStatus\":\"Live\"

我的问题是如何在输出中删除斜杠?我知道在原始的php中有逃生反斜杠的选项,但我可以在Symfony中使用什么?

3 个答案:

答案 0 :(得分:4)

我也一直在努力解决这个问题。是的,我已经使用了另一种方法,也许对你来说很有用。

Symfony 2序列化程序允许您指定将由 JsonEncoder 直接传递给json_encode函数的一些选项。 然后,您可以个性化您的使用情况,在传递给serialize方法的第三个参数数组的键json_encode_options下添加更多选项

$serializer->serialize($entity, 'json',  ['json_encode_options' => JSON_UNESCAPED_SLASHES]);

答案 1 :(得分:4)

我有同样的问题,它不是来自Serializer,而是我返回响应的方式:

return new JsonResponse($serialized);

而不是:

return new JsonResponse($serialized, 200, array(), true);

为了避免JsonResponse对编码的json进行编码,从而引用了json。

希望这有帮助。 PS:对不起我的法语英语:)。

答案 2 :(得分:2)

您可以使用JSON_UNESCAPED_SLASHES常量(php> = 5.4.0)。

use Symfony\Component\Serializer\Encoder\JsonDecode;
use Symfony\Component\Serializer\Encoder\JsonEncode;

$encoder = new JsonEncoder(new JsonEncode(JSON_UNESCAPED_SLASHES), new JsonDecode(false))