IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Question JSON avec du VB.NET


Sujet :

ASP.NET

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut Question JSON avec du VB.NET
    Bonjour à tous.

    Je patauge pas mal depuis 14 h 00 à chercher des solutions sur le net, mais je crois que je ne trouve rien parce que ce que je veux faire à l'air d'être impossible.
    Je dois récupérer des infos par le biais de l'API BLizzard WOW. A chaque fois que l'on à besoins d'un truc il suffit de récupérer avec une URL du type : "http://eu.battle.net/api/wow/data/character/races?locale=fr_FR" et n récupère un fichier JSON.

    Bon, jusque là ça va, je connais pas le JSON, je découvre et je comprends plus ou moins qu'il faut le parser pour s'en servir.

    Donc je cherche à parser et je comprends rien des innombrables solutions que je trouve. En gros, je me dis que j'ai pas le début du départ.
    Genre je ne trouve pas les Imports à faire en haut de code.

    Et puis je commence à me poser une question toute bête : est ce que avec mon Visual Studio 2008 je peux jouer avec les JSON ?
    SI oui, comment : les Imports ou les DLL à aller cherche et où.
    Si non, à part migrer vers une version plus récente, j'ai une solution ?

    Merci pour votre aide et bonne journée à tous.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  2. #2
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Bonjour,
    Citation Envoyé par zooffy Voir le message
    Bon, jusque là ça va, je connais pas le JSON, je découvre et je comprends plus ou moins qu'il faut le parser pour s'en servir.
    JavaScript Object Notation. Il faut penser sérialisation plutôt que parseur

    Vous pouvez utiliser par exemple la classe .Net JavaScriptSerializer

  3. #3
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour ton aide et merci pour le petit point de vocabulaire.
    Comme je ne comprends ni le mot parser, ni le mot serialisation, ben je vais aller voir le lien.

    Ah oui, j'oubliais : je suis pas ingénieur, j'ai pas fait de grande école où on apprend tout ces mots. J'ai appris l'informatique sur le tas.

    Maintenant le lien. ça me paraissait simple au départ jusqu'au moment où j'ai copié le premier exemple de code.
    Là, j'ai une erreur que je ne comprends pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim RegisteredUsers As New List(Of Person)()
    Il me dit : "Type 'person' non défini". Je ne sais pas définir ce genre de type et je ne trouve pas, dans l'exemple le moyen de le faire.

    Serait il possible d'avoir plus de détail en prenant des exemples faciles d'accès ?

    Merci et bonne journée.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Salut,

    Ton erreur doit venir du fait que tu as oublié de copier une partie du code, la classe "Person"

    J'ai donc repris l'exemple du lien que j'ai transféré dans une application console.
    Pour utiliser "JavaScriptSerializer" en mode console il faut importer la référence : "System.Web.Extensions".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Imports System.Web.Script.Serialization
     
    Module Module1
     
        Sub Main()
            Dim RegisteredUsers As New List(Of Person)()
            RegisteredUsers.Add(New Person With {.PersonID = 1, .Name = "Bryon Hetrick", .Registered = True})
            RegisteredUsers.Add(New Person With {.PersonID = 2, .Name = "Nicole Wilcox", .Registered = True})
            RegisteredUsers.Add(New Person With {.PersonID = 3, .Name = "Adrian Martinson", .Registered = False})
            RegisteredUsers.Add(New Person With {.PersonID = 4, .Name = "Nora Osborn", .Registered = False})
     
            Dim serializer As New JavaScriptSerializer()
            Dim serializedResult = serializer.Serialize(RegisteredUsers)
     
            'La console affiche notre liste de personnes au format JSON'
            Console.WriteLine(serializedResult)
            Console.WriteLine("------------------------------------------------------")
            Dim deserializedResult = serializer.Deserialize(Of List(Of Person))(serializedResult)
            For Each person As Person In deserializedResult
                'On affiche chaque personne en utilisant la méthode "ToString()" de la classe Person'
                Console.WriteLine(person)
            Next
     
            Console.ReadLine()
        End Sub
     
        Public Class Person
            Public Property PersonID As Integer
            Public Property Name As String
            Public Property Registered As Boolean
     
            Public Overrides Function ToString() As String
                Return "PersonID : " + Me.PersonID.ToString() + " | Name : " + Me.Name + " | Registered : " + Registered.ToString()
            End Function
        End Class
     
    End Module
    En espérant t'éclairer...

  5. #5
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour ton aide. J'ai enfin vu le code de la classe Person. Je suis vraiment une nouille.

    Du coup, j'ai prolongé ma recherche et j'ai trouvé un truc qui s'appelle newtonsoft json et c'est pas mal, on dirait.

    Par contre, j'ai encore du mal à exploiter le résultat.
    J'ai fait ça comme code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    request = DirectCast(WebRequest.Create("http://eu.battle.net/api/wow/data/character/races?locale=fr_FR"), HttpWebRequest)
                response = DirectCast(request.GetResponse(), HttpWebResponse)
                reader = New StreamReader(response.GetResponseStream())
     
                Dim rawresp As String
                rawresp = reader.ReadToEnd()
     
                Dim jResults As JObject = JObject.Parse(rawresp)
                'Dim results As List(Of JToken) = jResults.Children().First
                'Dim strResult As String = jResults.Children().First
                lbltest.Text = jResults.ToString
    ça m'affiche bien les données en ligne
    Mais je comprends pas comment les récupérer dans un format exploitable avec mes moyens intellectuels.
    Les List(of T) je comprends pas. Alors je voudrais mettre ça dans une DataTable (parce que ça, je maitrise) et je trouve pas comment faire, même en lisant toutes les doc que je trouve.

    Une idée ?

    Merci et bonne journée.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    A quoi ressemble : "jResults" ?

  7. #7
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    A ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    { "races": [ { "id": 11, "mask": 1024, "side": "alliance", "name": "Draeneï" }, { "id": 22, "mask": 2097152, "side": "alliance", "name": "Worgen" }, { "id": 10, "mask": 512, "side": "horde", "name": "Elfe de sang" }, { "id": 4, "mask": 8, "side": "alliance", "name": "Elfe de la nuit" }, { "id": 3, "mask": 4, "side": "alliance", "name": "Nain" }, { "id": 25, "mask": 16777216, "side": "alliance", "name": "Pandaren" }, { "id": 26, "mask": 33554432, "side": "horde", "name": "Pandaren" }, { "id": 6, "mask": 32, "side": "horde", "name": "Tauren" }, { "id": 5, "mask": 16, "side": "horde", "name": "Mort-vivant" }, { "id": 2, "mask": 2, "side": "horde", "name": "Orc" }, { "id": 7, "mask": 64, "side": "alliance", "name": "Gnome" }, { "id": 9, "mask": 256, "side": "horde", "name": "Gobelin" }, { "id": 1, "mask": 1, "side": "alliance", "name": "Humain" }, { "id": 8, "mask": 128, "side": "horde", "name": "Troll" }, { "id": 24, "mask": 8388608, "side": "neutral", "name": "Pandaren" } ] }
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Cette fois j'ai utilisé Json.net(newtonsoft json) [que j'utilise d'habitude].
    Je suis plutôt monsieur "Objet" que monsieur "DataTable" alors j'ai fait de l'objet et ensuite de la 'bidouille' pour avoir une DataTable...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Imports Newtonsoft.Json
     
    Module Module1
     
        Sub Main()
            Dim jsonString As String = "{ ""races"": [ { ""id"": 11, ""mask"": 1024, ""side"": ""alliance"", ""name"": ""Draeneï"" }, { ""id"": 22, ""mask"": 2097152, ""side"": ""alliance"", ""name"": ""Worgen"" }, { ""id"": 10, ""mask"": 512, ""side"": ""horde"", ""name"": ""Elfe de sang"" }, { ""id"": 4, ""mask"": 8, ""side"": ""alliance"", ""name"": ""Elfe de la nuit"" }, { ""id"": 3, ""mask"": 4, ""side"": ""alliance"", ""name"": ""Nain"" }, { ""id"": 25, ""mask"": 16777216, ""side"": ""alliance"", ""name"": ""Pandaren"" }, { ""id"": 26, ""mask"": 33554432, ""side"": ""horde"", ""name"": ""Pandaren"" }, { ""id"": 6, ""mask"": 32, ""side"": ""horde"", ""name"": ""Tauren"" }, { ""id"": 5, ""mask"": 16, ""side"": ""horde"", ""name"": ""Mort-vivant"" }, { ""id"": 2, ""mask"": 2, ""side"": ""horde"", ""name"": ""Orc"" }, { ""id"": 7, ""mask"": 64, ""side"": ""alliance"", ""name"": ""Gnome"" }, { ""id"": 9, ""mask"": 256, ""side"": ""horde"", ""name"": ""Gobelin"" }, { ""id"": 1, ""mask"": 1, ""side"": ""alliance"", ""name"": ""Humain"" }, { ""id"": 8, ""mask"": 128, ""side"": ""horde"", ""name"": ""Troll"" }, { ""id"": 24, ""mask"": 8388608, ""side"": ""neutral"", ""name"": ""Pandaren"" } ] }"
            Dim deserialized = JsonConvert.DeserializeObject(Of Result)(jsonString)
     
            Console.WriteLine("Races :")
            For Each race As Race In deserialized.Races
                Console.WriteLine("Race[id:{0}] - mask:{1} | side:{2} | name:{3}", race.Id.ToString(), race.Mask.ToString(), race.Side, race.Name)
            Next
     
            Dim dataTable As New DataTable
            dataTable.Columns.Add("Id", GetType(Integer))
            dataTable.Columns.Add("Mask", GetType(Integer))
            dataTable.Columns.Add("Side", GetType(String))
            dataTable.Columns.Add("Name", GetType(String))
            For Each race As Race In deserialized.Races
                dataTable.Rows.Add(race.Id, race.Mask, race.Side, race.Name)
            Next
            Console.ReadLine()
        End Sub
     
        Public Class Result
            Public Property Races As List(Of Race)
        End Class
     
        Public Class Race
            Public Property Id As Integer
            Public Property Mask As Integer
            Public Property Side As String
            Public Property Name As String
        End Class

  9. #9
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour ton aide.

    J'ai peur de comprendre un truc : avec ta solution il fa falloir que je créé une class pour chaque JSON que je vais aller chercher ?
    Et que je programme un "parser" avec la structure à chaque fois ?

    Il n'y aurait pas un truc plus simple pour transférer une JSON dans une DataTable, tut bêtement ?
    Et aussi, prendre la chaine interprétée en entrée c'est cool, mais à partir de l'URL, on fait comment ?

    Parce que, comme je l'ai expliqué en début de topic, j'ai besoins de récupérer des infos à partir de l'API de Wow chez Blizzard. Du coup, je vas avoir pas mal de requêtes différentes sur cette API qui vont me retourner des résultats différents.

    En tout cas merci pour le coup de main, je vais tenter de trouver une solution avec ce que tu m'as dis, mais j'espère qu'il existe un truc plus facile d'accès.

    Bonne journée.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  10. #10
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Il n'y aurait pas un truc plus simple pour transférer une JSON dans une DataTable, tut bêtement ?
    La structure d'un json ne rentre pas forcement dans un datatable (colonnes/lignes). Un objet json peut avoir plusieurs niveaux différents et une complexité supérieur à celle d'un datatable.

  11. #11
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour cette information qui ne me ravi pas des masses.

    Le projet est mis en suspend pour l'instant, du cou, je vais avoir plus de temps.
    Mais j'ai encore du mal à comprendre le fonctionnement de ce truc là.

    D'autant plus que je ne cherche pas forcément à manipuler du JSON dans l'absolu mais simplement à récupérer des infos depuis le BNET de Blazzard.

    En tout cas merci pour tout.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

Discussions similaires

  1. Réponses: 11
    Dernier message: 02/09/2005, 15h41
  2. Probleme avec debuggeur Visual Net 2003
    Par 0xYg3n3 dans le forum MFC
    Réponses: 8
    Dernier message: 15/05/2005, 22h11
  3. probleme de link avec visual studio .net 2003
    Par kamal101 dans le forum MFC
    Réponses: 9
    Dernier message: 28/03/2005, 21h44
  4. Probleme d'utilisation de directX 9 avec visual studio.net
    Par cranedoeuf dans le forum DirectX
    Réponses: 1
    Dernier message: 24/05/2004, 04h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo