web-dev-qa-db-fra.com

Analyse de l'API JSON en C #

donc je suis assez nouveau en programmation mais je cherche à aller beaucoup plus loin avec. J'ai récemment commencé à participer à un projet visant à créer un programme WinForm pour un site Web utilisant un système API en JSON.

Je n'avais jamais utilisé d'API auparavant, donc je ne sais pas trop comment ça marche, mais après l'avoir regardée pendant quelques minutes, il me semble en avoir l'essentiel. Ce que je ne comprends pas, c'est comment l'analyse JSON en C # fonctionne exactement.

J'ai trouvé ce lien après une petite recherche sur Google. Et je l'ai obtenu (quelque peu) avec ce code.

static void Main(string[] args)
{
        WebClient c = new WebClient();
        var vLogin = c.DownloadString("https://www.openraid.us/index.php/api/login/username/password");
        //Returns string 
        //{"status":1,"error":null,"token":"250-1336515541-c48d354d96e06d488d1a2530071ef07c9532da26"} 
        //Token = random, no decisive length*/
        JObject o = JObject.Parse(vLogin);
        Console.WriteLine("Login Status: " + o["status"]);
        String sToken = "" + o["token"];
        Console.WriteLine(sToken);
        Console.WriteLine("");
        //Breaks after this
        var myRaids = c.DownloadString("https://www.openraid.us/index.php/api/myraids/"+sToken);
        JObject r = JObject.Parse(myRaids); //error occurs here
        String sEventId = "" + r["event_id"];
        Console.WriteLine("Event ID: " + sEventId);
        Console.ReadLine();
}

Donc, pour moi, il semble que j'ai analysé 1 page terminée et gérée, mais lorsque je passe à la seconde, j'obtiens cette erreur.

Erreur lors de la lecture de JObject à partir de JsonReader. L'élément JsonReader actuel n'est pas un objet: StartArray. Chemin '', ligne 1, position 1.

Je suppose donc que ma question est la suivante: comment analyser plus d'une page ou appel de JSON et quel serait le moyen le plus simple de décomposer chaque section de l'objet JSON (telle que status, error et token, en chaînes C #?

16
Cistoran

Avez-vous essayé de JArray à la place? En fonction du type d'objet que vous essayez de retourner

WebClient client = new WebClient();
var data = client.DownloadString("");
var jArray = JArray.Parse(data);
45
sjokko

JSON nécessite des crochets pour les tableaux et des virgules entre plusieurs objets.

C'est selon le standard JSON . Je recommande également d’utiliser JSON.net via NuGet au lieu de l’analyseur JSON natif, sauf s’il est excessif et que vous ne pouvez pas avoir un surplus de poids.

Par exemple, lorsque vous analysez un fichier avec deux objets JSON distincts, les opérations suivantes ne fonctionnent pas selon la norme JSON (il manque une virgule entre les 2 objets et les deux objets ne sont pas encapsulés entre crochets):

{"status":1,"error":null}
{"status":2,"error":null}

Les 3 objets JSON suivants analysés à partir d'un fichier fonctionnent (entre crochets pour plusieurs objets et virgules entre objets):

[{"glossary": {"title": "fun glossary","SeeAlso": ["GML", "XML"]},
{"glossary": {"title": "grey glossary","SeeAlso": ["GML", "XML"]},
{"glossary": {"title": "blue glossary","SeeAlso": ["GML", "XML"]}]
2
Kyle

Vous pouvez couper chaque objet JSON (Array) en plusieurs objets à l'aide de boucles for, l'API C # est System.Json.

var jsonArray = JsonArray.Parse(st);//st is the string which contain the JSON objects
foreach (var item in jsonArray) {
    JsonObject ob = new JsonObject(item);
    foreach (var t in ob.Values) {
        JsonObject oo = new JsonObject(t);
        foreach (var x in oo) {
            textBox1.AppendText(x.Key + “ : ” + x.Value + “\n”);
        }
    }
}
0
Ibraheem Osama