Как прочитать файл JSON с помощью StreamReader на C# и пропустить недопустимые узлыC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как прочитать файл JSON с помощью StreamReader на C# и пропустить недопустимые узлы

Сообщение Anonymous »

Я пытаюсь прочитать и обработать большой файл JSON на C# с помощью StreamReader и JsonTextReader. Моя цель — прочитать узел файла JSON по узлу, и если какой-либо узел содержит недопустимые данные (например, неверный формат JSON или отсутствующие поля), я хочу пропустить этот узел и продолжить обработку остальной части файла.
Вот пример файловой структуры JSON, с которой я работаю:
[
{
"id": "a5db927f-62b3-4b30-b520-83cff902c3ef",
"type": "message"
"parent": null,
"participant": "mauraans",
"body": "We've moved the meeting out. Apologies for the last minute changes. Appears daylight savings time has caused challenges with time zones.",
"conversation": "D04QU11BTJN",
"importance": "normal",
"timestamp": "1680541760.235769",
"lastmodifiedtime": null,
"deleted": false
},
{
"id": "6db0169c-d8d9-4d27-8fa9-b60b9f163b87",
"type": "message",
"parent": null,
"participant": "mauraans",
"body": "What time did you have on your calendar and we'll go with that?",
"conversation": "D04QU11BTJN",
"importance": "normal",
"timestamp": "1680539518.455199",
"lastmodifiedtime": null,
"deleted": false
}
]

В приведенном выше примере в первом узле отсутствует запятая после «type»: «message», что делает его недействительным JSON. Мне нужно корректно обрабатывать такие случаи, пропуская недопустимый узел и переходя к следующему, не останавливая весь процесс.
Вот код, который я пробовал:
using(FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) {
using(BufferedStream bufferedStream = new BufferedStream(fs, 5000)) {
using(StreamReader r = new StreamReader(bufferedStream))
using(JsonTextReader reader = new JsonTextReader(r)) {
JsonSerializer serializer = new JsonSerializer();

while (reader.Read()) {
try {
if (reader.TokenType == JsonToken.StartObject) {
var node = serializer.Deserialize < dynamic > (reader);
Console.WriteLine(node.id);
nodeCount++;
}
} catch (JsonReaderException ex) {
reader.Skip();
}
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... alid-nodes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как прочитать файл .json в C# с помощью StreamReader? [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Пропустить недопустимые элементы массива/коллекции, помеченные @Valid.
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Пропустить недопустимые элементы массива/коллекции, помеченные @Valid.
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как написать тип StreamReader в файл изображения в Python?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Python: чтение длинных строк с помощью asyncio.StreamReader.readline()
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»