4

我正在使用 JMS 序列化和反序列化我的实体我有一个批处理来生成一个 json 文件和其他读取该文件

我的实体有一个字段 DateTime 如下

/**
 * @var \DateTime
 *
 * @ORM\Column(name="inscription_date", type="datetime", nullable=false)
 * @JMS\Type("DateTime<'d/m/Y'>")
 */
private $inscriptionDate;

当实体被序列化时,结果是

"inscription_date":"30\/05\/2007"

但问题是当我要反序列化时我得到

[JMS\Parser\SyntaxErrorException]                                            
Expected end of input, but got "/" of type T_NONE at position 11 (0-based).

注意:当我使用json_decode内置函数时,返回一个 stdClass 没有问题


更新 1

好像不是这个字段,我删除了原来序列化的字段,还是报同样的错误。每个对象都在一行中序列化,每个对象由 PHP_EOL 分隔

这是数据样本people.json

{"name":"dexter","date":"13/04/2009", "doc": "1047516320" }
{"name":"deedee","date":"30/05/2013", "doc": "1047516325" }

所有字段均有效且数据类型为数字或字符串

4

2 回答 2

5

当反序列化失败时会发生此错误。确保您使用正确类型的数据传递正确的 json。还要检查您的也将被反序列化的子对象是否也正确 - 传递的 json 也必须是正确的。

还要确保在没有正斜杠的情况下正确编写您的课程:

@Type("Acme\DemoBundle\Entity\City")

还要确保这实际上是类,而不是接口(您可能需要编写接口解析器来实现它)

于 2013-12-20T06:31:48.310 回答
0

解析器因 people.json 中的无效 JSON 而窒息。需要转义正斜杠或固线。请参阅此处的 JSON 文档http://json.org/并阅读有关字符串的部分。

您的源 JSON 应如下所示:

{"name":"dexter","date":"13\/04\/2009", "doc": "1047516320" }

如果您无法控制源 JSON,那么您必须编写自己的处理程序来实现 SubscribingHandlerInterface 并将其注册到您的序列化程序中。

于 2014-02-18T01:09:24.163 回答