Dans cet article, nous aborderons le défi de l'analyse de gros fichiers JSON pouvant contenir une syntaxe non valide ou formats spécifiques non pris en charge nativement par Json.NET.
Le problème survient lorsque les données JSON sont constituées de plusieurs tableaux séparés par des crochets fermants et ouvrants. au lieu d'être imbriqué dans un seul tableau. Cet écart par rapport à la syntaxe JSON standard peut entraîner des difficultés pour les méthodes de désérialisation intégrées de Json.NET.
Initialement, l'utilisation de JsonConvert.DeserializeObject pour analyser de gros fichiers JSON peut conduire à des exceptions lorsque les données dépassent les limites de la mémoire. De même, tenter de désérialiser directement vers un JArray peut également entraîner des erreurs.
Pour gérer efficacement ce scénario, nous utiliserons une approche personnalisée impliquant JsonTextReader. En définissant l'indicateur SupportMultipleContent sur true, le lecteur peut reconnaître le format JSON non valide et traiter chaque tableau comme une section de contenu distincte.
Le code C# suivant montre comment implémenter cette technique :
using (WebClient client = new WebClient()) using (Stream stream = client.OpenRead(stringUrl)) using (StreamReader streamReader = new StreamReader(stream)) using (JsonTextReader reader = new JsonTextReader(streamReader)) { reader.SupportMultipleContent = true; var serializer = new JsonSerializer(); while (reader.Read()) { if (reader.TokenType == JsonToken.StartObject) { Contact c = serializer.Deserialize<Contact>(reader); Console.WriteLine(c.FirstName + " " + c.LastName); } } }
En accédant à chaque tableau indépendamment grâce à cette méthode, nous pouvons désérialiser efficacement les données JSON ligne par ligne, surmonter efficacement les limitations de mémoire et de syntaxe rencontrées avec les méthodes d'analyse Json.NET standard.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!