Я пытаюсь прочитать и обработать большой файл 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
Как прочитать файл JSON с помощью StreamReader на C# и пропустить недопустимые узлы ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Python: чтение длинных строк с помощью asyncio.StreamReader.readline()
Anonymous » » в форуме Python - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-