16

ですから、私はプログラミングにかなり慣れていませんが、もっと深くプログラミングしたいと思っています。私は最近、JSONでAPIシステムを使用するWebサイト用のWinFormプログラムを作成するプロジェクトに参加し始めました。

私はこれまでAPIを使用したことがないので、どのように機能するかはよくわかりませんが、数分間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ページの解析が完了して処理されたように見えますが、2番目のページに移動すると、このエラーが発生します。

JsonReaderからのJObjectの読み取り中にエラーが発生しました。現在のJsonReaderアイテムはオブジェクトではありません:StartArray。パス''、行1、位置1。

だから私の質問は、JSONの複数のページまたは呼び出しを解析するにはどうすればよいですか?JSONオブジェクトの各セクション(、、、、など)をC#文字列に分割する最も簡単な方法はstatuserrorですかtoken

4

3 に答える 3

45

代わりにJArrayを試しましたか?返そうとしているオブジェクトの種類によって異なります

WebClient client = new WebClient();
var data = client.DownloadString("");
var jArray = JArray.Parse(data);
于 2012-06-28T11:56:21.980 に答える
2

JSONでは、複数のオブジェクト間の配列とコンマに角かっこが必要です。

これはJSON標準に準拠していますまた、ネイティブJSONパーサーの代わりにNuGetを介してJSON.netを使用することをお勧めします。ただし、それがやり過ぎで、余分な肥大化が発生しない場合を除きます。

たとえば、2つの別々のJSONオブジェクトを含むファイルの解析-以下はJSON標準では機能しません(2つのオブジェクトの間にコンマがなく、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"]}]
于 2012-05-09T01:54:31.873 に答える
0

C#APIがSystem.Jsonであるforループを使用して、すべての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”);
        }
    }
}
于 2012-05-08T22:29:19.807 に答える