C# 用C解析jsonapi#

C# 用C解析jsonapi#,c#,json,parsing,json.net,C#,Json,Parsing,Json.net,所以我对编程相当陌生,但我希望能更深入地了解它。我最近开始参与一个项目,为一个使用JSON API系统的网站创建WinForm程序 我以前从未使用过API,所以我不太确定它是如何工作的,但在看了几分钟之后,我似乎已经掌握了它的要点。我不明白的是在C#中解析JSON到底是如何工作的 我发现 在谷歌搜索之后。我用这个代码实现了它(某种程度上) static void Main(string[] args) { WebClient c = new WebClient();

所以我对编程相当陌生,但我希望能更深入地了解它。我最近开始参与一个项目,为一个使用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读取作业对象时出错。当前JsonReader项不是对象:StartArray。路径“”,第1行,位置1


因此,我想我的问题是,如何解析超过1页的JSON或JSON调用,以及如何最简单地将JSON对象的每个部分(如
状态
错误
、和
标记
)分解为C字符串?

您可以使用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”);
        }
    }
}

JSON要求多个对象之间的数组和逗号使用括号

这是。我还建议使用而不是本机JSON解析器,除非它是过度的,并且您不能有额外的膨胀

例如,解析一个包含两个单独JSON对象的文件-以下内容不符合JSON标准(两个对象之间缺少逗号,并且两个对象没有用括号封装):

以下3个从文件解析的JSON对象可以工作(多个对象用括号表示,对象之间用逗号表示):


您是否尝试使用JArray?取决于您尝试返回的对象类型

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

从外观上看,第二个请求没有返回有效的JSON。您是否验证了返回的数据是您认为的数据?令牌从未保持不变,但在24小时内有效。我在浏览器中手动打开API并返回。因此,对我来说,它看起来像是有效的JSON,但错误可能出现在下载字符串h的调用中最后是aving
sToken
。从功能上看,您的代码看起来不错;而且,您提供的json响应似乎有效。您对DownloadString()的调用是否可能返回了其他内容?为了理智起见,请尝试准确打印出从该方法调用返回的内容,而不进行解析。我同意Nathan的观点。在
c.DownloadString
之后立即写出字符串
myRaids
,或者在该行上进行调试。我将json粘贴到其中,它从中创建了一个有效的c#对象。我直接进行输出下载字符串后,它可以正常工作并正确显示数据,但我不知道你会在哪里找到它,如果我无法解析它,我将如何分解字符串?+1它可能在文档中的某个地方,但人们会认为JSON.Net API更直观一些……感谢这个答案:-)
[{"glossary": {"title": "fun glossary","SeeAlso": ["GML", "XML"]},
{"glossary": {"title": "grey glossary","SeeAlso": ["GML", "XML"]},
{"glossary": {"title": "blue glossary","SeeAlso": ["GML", "XML"]}]
WebClient client = new WebClient();
var data = client.DownloadString("");
var jArray = JArray.Parse(data);