Анализ JSON API в С# - программирование
Подтвердить что ты не робот

Анализ JSON API в С#

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

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

Я нашел эта ссылка после небольшого поиска в 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, в строки С#?

4b9b3361

Ответ 1

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

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

Ответ 2

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"]}]

Ответ 3

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