#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; } });
Комментариев нет:
Отправить комментарий