@Nubzilo
Изучаю C#

Как распарсить большой JSON файл > 500mb?

Есть огромный json файл с записями такого вида:
[
{"id":95689,
"name":"Имя",
"type":"message",
"description":"Описание",
"count":138},
{"id":959,
"name":"Имя",
"type":"message",
"description":"Описание",
"count":38}
]

Как эффективно распарсить такой файл? Какой библиотекой? Пожалуйста, с примерами.
Все, что нагуглил - либо работает не эффективно, либо я просто не разобрался как правильно это использовать...
  • Вопрос задан
  • 4067 просмотров
Пригласить эксперта
Ответы на вопрос 5
А в чем проблема? не устраивает скорость парсинга, что вы пробовали?
Ответ написан
begemot_sun
@begemot_sun
Программист в душе.
Вам надо использовать потоковый парсер JSON. Погуглите.
Ответ написан
@asd111
В JSON.net есть JsonTextReader.
Скорее всего он потоковый.
string json = @"{
    'CPU': 'Intel',
    'PSU': '500W',
    'Drives': [
      'DVD read/writer'
      /*(broken)*/,
      '500 gigabyte hard drive',
      '200 gigabype hard drive'
    ]
}";

JsonTextReader reader = new JsonTextReader(new StreamReader(json));
while (reader.Read())
{
    if (reader.Value != null)
        Console.WriteLine("Token: {0}, Value: {1}", reader.TokenType, reader.Value);
    else
        Console.WriteLine("Token: {0}", reader.TokenType);
}

// Token: StartObject
// Token: PropertyName, Value: CPU
// Token: String, Value: Intel
// Token: PropertyName, Value: PSU
// Token: String, Value: 500W
// Token: PropertyName, Value: Drives
// Token: StartArray
// Token: String, Value: DVD read/writer
// Token: Comment, Value: (broken)
// Token: String, Value: 500 gigabyte hard drive
// Token: String, Value: 200 gigabype hard drive
// Token: EndArray
// Token: EndObject
Ответ написан
@Nubzilo Автор вопроса
Изучаю C#
Попробовал ServiceStack.Text
Парсит быстрее чем Json.Net, но я не смог понять как добавить туда что то вроде фильтров, что б не парсить всю коллекцию.
Попробую еще через JsonTextReader, чуть позже отпишу.
Ответ написан
aleksandr_kesha
@aleksandr_kesha
/// <summary>
		/// Deserialize json string in file to specified object
		/// </summary>
		/// <typeparam name="T">Specified object type</typeparam>
        /// <param name="filepath">Path to text file contained json string</param>
		/// <returns></returns>
		public static T DeserializeJsonFromFile<T>(string filepath)
		{
			T obj;

            using (var reader = new StreamReader(filepath))
			{
				using(var jsonReader = new JsonTextReader(reader))
				{
					var serializer = new Newtonsoft.Json.JsonSerializer();
					obj = serializer.Deserialize<T>(jsonReader);
				}
			}

			return obj;
		}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы