JMSSerializer Ожидаемый конец ввода, но получен / типа T_NONE

я использую 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" }

все поля допустимы, а типы данных являются числами или строками


person rkmax    schedule 01.09.2013    source источник


Ответы (2)


Эта ошибка возникает при сбое десериализации. Убедитесь, что вы передаете правильный json с правильными типами данных. Также проверьте правильность ваших подобъектов, которые также будут десериализованы - переданный json также должен быть правильным.

Также не забудьте правильно написать свой класс без косой черты:

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

Также убедитесь, что это на самом деле класс, а не интерфейс (вам, вероятно, нужно написать преобразователь интерфейса для его реализации)

person pleerock    schedule 20.12.2013
comment
Это действительно помогло мне решить проблему, спасибо. - person Robert; 03.02.2016

Парсер задыхается от недопустимого JSON в people.json. Косая черта, или солид, должна быть экранирована. См. документацию по JSON здесь http://json.org/ и прочитайте раздел о строках.

Ваш исходный JSON должен выглядеть так:

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

Если у вас нет контроля над исходным JSON, вы должны написать свой собственный обработчик, реализующий SubscribingHandlerInterface, и зарегистрировать его в своем сериализаторе.

person user3321357    schedule 18.02.2014