【问题标题】:JMSSerializer Expected end of input, but got "/" of type T_NONEJMSSerializer 预期的输入结束,但得到 T_NONE 类型的“/”
【发布时间】:2013-09-04 23:27:43
【问题描述】:

我正在使用 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" }

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

【问题讨论】:

    标签: php serialization deserialization jmsserializerbundle


    【解决方案1】:

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

    还要确保在没有正斜杠的情况下正确编写你的类:

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

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

    【讨论】:

    • 这实际上帮助我解决了问题,谢谢。
    【解决方案2】:

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

    您的源 JSON 应如下所示:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多