Страницы

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

суббота, 30 ноября 2019 г.

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

#c_sharp #net #json #jsonnet


Использую библиотеку newtonsoft json.net. В файле у меня хранится коллекция json
объектов. Допустим у нас есть поврежденная json строка в одном из объектов, например: 

{
   "PublicationDate": "1999-04-14T00:00:00",
   !error!,
   "Authors": ["Vasya","Dima"],
   "Location": "Moscow"
}


Могу ли я как-нибудь пропустить данный объект и перейти к парсингу следующего?
    


Ответы

Ответ 1



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

Ответ 2



var data = JsonConvert.DeserializeObject(jsonStr, new JsonSerializerSettings { Error = (sender, args) => { args.ErrorContext.Handled = true; } });

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

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