在 C# 中解析 JSON API
本文关键字:JSON API | 更新日期: 2023-09-27 18:33:30
所以我对编程相当陌生,但我希望更深入地使用它。 我最近开始参与一个项目,为一个使用 JSON API 系统的网站创建一个 WinForm 程序。
我以前从未使用过 API,所以我不太确定它是如何工作的,但在看了几分钟后,我似乎已经掌握了它的要点。 我不明白的是 C# 中解析 JSON 的确切工作原理。
我发现这个链接经过一点谷歌搜索。 我让它(在某种程度上(用这段代码工作。
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 页并处理了,但是当我进入第二个页面时,我收到此错误。
从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:StartArray。路径 '',第 1 行,位置 1。
所以我想我的问题是,我如何解析超过 1 页或 JSON 调用,以及将 JSON 对象的每个部分(例如 status
、error
和 token
(分解为 C# 字符串的最简单方法是什么?
你试过JArray吗?取决于您尝试返回的对象类型
WebClient client = new WebClient();
var data = client.DownloadString("");
var jArray = JArray.Parse(data);
JSON 需要多个对象之间的数组和逗号的括号。
这是根据 JSON 标准。 我还建议通过 NuGet 而不是本机 JSON 解析器使用 JSON.net,除非它矫枉过正并且您不能有额外的膨胀。
例如,使用两个单独的 JSON 对象解析文件 - 以下内容不适用于 JSON 标准(2 个对象之间缺少逗号,并且两个对象未用括号封装(:
{"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"]}]
您可以使用for循环将每个JSON对象(数组(剪切成更多对象C# 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”);
}
}
}