it-roy-ru.com

Разбор JSON API в C #

так что я довольно новичок в программировании, но я собираюсь углубиться в это. Недавно я начал участвовать в проекте по созданию программы WinForm для веб-сайта, который использует систему API в JSON.

Я никогда раньше не использовал API, поэтому я не совсем уверен, как он работает, но, посмотрев на него несколько минут, я, похоже, понял его суть. Что я не понимаю, так это то, как работает синтаксический анализ JSON в C #.

Я нашел эту ссылку после небольшого поиска в Google. И я получил его (несколько) с этим кодом.

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();
}

Так что для меня это выглядит так, как будто я обработал и обработал 1 страницу, но когда я перехожу на вторую, я получаю эту ошибку.

Ошибка чтения JObject из JsonReader. Текущий элемент JsonReader не является объектом: StartArray. Путь '', строка 1, позиция 1.

Поэтому я предполагаю, что мой вопрос состоит в том, как мне проанализировать более 1 страницы или вызов JSON и какой самый простой способ разбить каждый раздел объекта JSON (например, status, error и token, на строки C #?

16
Cistoran

Вы пытались вместо JArray? В зависимости от того, какой объект вы пытаетесь вернуть

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

JSON требует скобки для массивов и запятых между несколькими объектами.

Это в соответствии со стандартом JSON . Я также рекомендую использовать JSON.net через NuGet вместо встроенного анализатора JSON, если это не слишком излишне и у вас не может быть лишнего раздувания.

Например, при разборе файла с двумя отдельными объектами JSON следующее не работает в соответствии со стандартом JSON (отсутствует запятая между двумя объектами, и два объекта не заключены в квадратные скобки):

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

Следующие 3 объекта JSON, проанализированные из файла, работают (имеют скобки для нескольких объектов и запятые между объектами):

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

Вы можете разрезать каждый объект JSON (Array) на большее количество объектов, используя циклы for API C # - 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