Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

Десериализация поврежденных данных json.net

Использую библиотеку newtonsoft json.net. В файле у меня хранится коллекция json объектов. Допустим у нас есть поврежденная json строка в одном из объектов, например:
{ "PublicationDate": "1999-04-14T00:00:00", !error!, "Authors": ["Vasya","Dima"], "Location": "Moscow" }
Могу ли я как-нибудь пропустить данный объект и перейти к парсингу следующего?


Ответ

Данные в некорректном формате не должны обрабатываться. Данные в некорректном формате JSON — это данные не в формате JSON
Правильный способ
Почините то, что выдаёт вам некорректные данные.
Костыльный способ
Если вы не можете починить источник, то конвертируйте данные в корректный формат.
Если ошибка очень простая, например, некоторые элементы принимают вид !error!, как в вашем примере, то можно натравить на исходную строку регулярное выражение. Если ошибка сложная, то и решение сложное. Возьмите класс, разбирающий лексемы JSON из JSON.NET (JsonTextReader), модифицируйте под ожидаемую грамматику. Унаследоваться не получится, потому что весь важный код приватен. Придётся копипастить.
@VladD и другие пытаются найти обходные пути для "игнорирования" ошибки, но этот путь тупиковый, потому что для лексера нет выхода из состояния "ошибка". В этом состоянии он не знает, где он находится, и что следует дальше.

Комментариев нет:

Отправить комментарий