Ответ 1
Вместо этого вы пытались использовать JArray? В зависимости от того, какой объект вы пытаетесь вернуть
WebClient client = new WebClient();
var data = client.DownloadString("");
var jArray = JArray.Parse(data);
поэтому я довольно новичок в программировании, но я хочу пойти гораздо глубже. Недавно я начал участвовать в проекте по созданию программы 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
, в строки С#?
Вместо этого вы пытались использовать JArray? В зависимости от того, какой объект вы пытаетесь вернуть
WebClient client = new WebClient();
var data = client.DownloadString("");
var jArray = JArray.Parse(data);
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"]}]
Вы можете разрезать каждый объект 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");
}
}
}