Symfony2 Serialze实体从输出中转义反斜杠

Ahm*_*jid 2 php serialization json symfony

嗨,我正在为我的应用程序使用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');
Run Code Online (Sandbox Code Playgroud)

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

\"id\":1,\"matchAStatus\":\"Live\"
Run Code Online (Sandbox Code Playgroud)

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

小智 6

我也一直在努力解决这个问题。是的,我使用了另一种方法,也许对您有所帮助。

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

$serializer->serialize($entity, 'json',  ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
Run Code Online (Sandbox Code Playgroud)


Jea*_*rat 6

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

这样做(注意true):

return new JsonResponse($serialized, 200, array(), true);
Run Code Online (Sandbox Code Playgroud)

代替:

return new JsonResponse($serialized);
Run Code Online (Sandbox Code Playgroud)

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


Paw*_*zuk 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))
Run Code Online (Sandbox Code Playgroud)