您好我正在使用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中使用什么?
答案 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))