Analyse de L'API JSON en C#

donc je suis assez nouveau à la programmation mais je cherche à aller beaucoup plus profondément avec elle. J'ai récemment commencé à m'impliquer dans un projet visant à créer un programme WinForm pour un site web qui utilise un système API dans JSON.

Je n'ai jamais utilisé une API avant donc je ne suis pas tout à fait sûr comment cela fonctionne mais après l'avoir regardé pendant quelques minutes je semble avoir l'essentiel de celui-ci. Ce que je ne comprends pas, c'est comment Parser JSON dans C# marche.

j'ai trouvé ce lien après un peu de google recherche. Et je l'ai fait travailler (un 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();
}

alors pour moi, il semble que j'ai l'analyse d'une page faite et manipulée, mais quand je passe à la seconde je reçois cette erreur.

erreur de lecture de JObject de JsonReader. L'élément jsonreader actuel n'est pas un objet: StartArray. Path", ligne 1, position 1.

alors je suppose que ma question Est, Comment puis-je analyser plus d'une page ou appel de JSON et ce qui serait la façon la plus facile de rompre chaque section de l'objet JSON (comme status,error et token, dans C# strings?

16
demandé sur Cistoran 2012-05-09 02:21:54

3 réponses

avez-vous essayé de JArray à la place? En fonction de quel type d'objet vous essayez de retourner

WebClient client = new WebClient();
var data = client.DownloadString("");
var jArray = JArray.Parse(data);
45
répondu sjokko 2012-06-28 11:56:21

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

C'est selon la norme JSON. Je recommande aussi d'utiliser JSON.net via NuGet au lieu de l'analyseur JSON natif à moins qu'il ne soit exagéré et vous ne pouvez pas avoir le bloat supplémentaire.

par exemple, votre analyse d'un fichier avec deux objets JSON séparés - ce qui suit ne fonctionne pas selon la norme JSON (manque une virgule entre les 2 objets et les deux objets ne sont pas encapsulé par des crochets):

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

les 3 objets JSON suivants analysés à partir d'un fichier ne fonctionne (a des crochets pour les objets multiples et des virgules entre les objets):

[{"glossary": {"title": "fun glossary","SeeAlso": ["GML", "XML"]},
{"glossary": {"title": "grey glossary","SeeAlso": ["GML", "XML"]},
{"glossary": {"title": "blue glossary","SeeAlso": ["GML", "XML"]}]
2
répondu Kyle 2012-05-09 02:00:22

Vous pouvez couper chaque objet JSON (tableau) en plus d'objet en utilisant for loops l'API C# est Système.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
répondu Ibraheem Osama 2014-05-20 16:12:23