在 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 对象的每个部分(例如 statuserrortoken(分解为 C# 字符串的最简单方法是什么?

在 C# 中解析 JSON API

你试过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”);
        }
    }
}