18 votes

Comment analyser un fichier JSON en utilisant JSON.net

Je essaie de lire un fichier JSON et le parser. J'ai ce code pour lire à partir de mon fichier

StreamReader re = new StreamReader("artists.json");
JsonTextReader reader = new JsonTextReader(re);

Mais comment le parser maintenant à partir du lecteur pour que je puisse rechercher des données dans le fichier?

J'ai essayé de lire la documentation mais je n'ai rien trouvé

21voto

DarkGray Points 4740
    à l'aide de Newtonsoft.Json;

    //..

    JsonSerializer se = new JsonSerializer();
    object parsedData = se.Deserialize(reader);

10voto

ahkvk Points 1040

Si vous souhaitez le charger dans un objet JObject ou un type dynamic (et ne pas le désérialiser en un type .NET), vous pouvez utiliser la méthode JObject.Load

using(var sr = new StreamReader("artists.json")) 
{
    var reader = new JsonTextReader(sr);
    var jObject = JObject.Load(reader);

    //Obtenir une propriété de JObject
    var someValue = jObject.GetValue("someProperty").Value();

    // JObject peut être converti en un dynamic
    var dObject = (dynamic)jObject;
    someValue = (string)dObject.someProperty;

}

7voto

Sam Points 956

En réponse à "Quelques détails sur la manière de mettre en œuvre cela seraient utiles. - aknatn"

 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Text;

 public class Program
  {
         public static void Main()
         {
           //JSON = {"Property1":"as","CollectionProperty":[{"prop1":"1","prop2":"2","prop3":"3"}]}

           //Cette partie supérieure sert simplement à construire un flux 
           //- Pas besoin de le faire si vous accédez à un fichier 
           string JSON = "{\"Property1\":\"SomePropName\",\"CollectionProperty\":"+
           "[{"prop1":"1","prop2":"2","prop3":"3"}]}";
           byte[] byteArray = Encoding.UTF8.GetBytes(JSON);
           //byte[] byteArray = Encoding.ASCII.GetBytes(contents);
           MemoryStream stream = new MemoryStream(byteArray);
           // convertir le flux en chaîne

           JsonSerializer se = new JsonSerializer();

           StreamReader re = new StreamReader(stream);
           JsonTextReader reader = new JsonTextReader(re);
           var DeserializedObject = se.Deserialize(reader);

           Console.WriteLine(DeserializeObject.Property1);

           //"...Pour que je puisse rechercher des données dans le fichier?"
           //C'est à vous de décider comment gérer cela, mais maintenant vous avez du JSON
           //désérialisé et stocké en mémoire. 'Comment chercher' dépend de la classe des objets
           //De plus, la question initiale disait qu'il avait le JSON. Je recommande d'utiliser 
           //json2csharp.com/ ou jsonutils.com/
           //pour récupérer les classes afin de le désérialiser dans votre objet. 

           //Remarque 1: Vous n'avez pas toujours à le caster 
           //- J'essaie juste de le faire chaque fois que possible
           //Remarque 2: Comme vous utilisez un StreamReader, 
           //cela tiendra compte des grands objets JSON 
         }

    public class Collections
    {
        public List CollectionProperty = new List();
        public string Property1;
    }

    public class CollectionProperty
    {
        public string prop1 { get; set; }
        public string prop2 { get; set; }
        public string prop3 { get; set; }
    }
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X