2012-05-08 10 views
16

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

以前はAPIを使用したことがありませんでした。どのように動作するのかよく分かりませんが、数分間見た後、私はその要点を持っているようです。私が得られないことは、C#でJSONを正確に解析することです。

少しGoogle検索の後に this linkが見つかりました。そして、私はそれを(このコードで)いくらか働かせました。私が行われ、取り扱わ1ページを解析しているよう

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(); 
} 

だから私には見えますが、私は2番目に移動するとき、私はこのエラーを取得します。

JsonReaderからJObjectを読み取る際にエラーが発生しました。現在のJsonReaderアイテムはオブジェクトではありません:StartArray。パス1行目1の位置に設定してください。

私の質問は、1ページ以上のJSONの呼び出しやJSONの各セクションを分割する最も簡単な方法C#の文字列にそのようなstatuserror、およびtokenなどのオブジェクト(、?

+2

2番目の要求は有効なJSONを返していません。返されたデータがあなたが思うものであることを確認しましたか? –

+0

トークンは決して同じではありませんが、24時間有効です。私は手動でブラウザでAPIを開き、[this](http://pastebin.com/3anJMwsZ)を返しました。だから私には有効なJSONのようですが、最後に 'sToken'という文字列をダウンロードする呼び出しにエラーがある可能性があります。 – Cistoran

+1

機能的には、コードは正常です。また、あなたが提供したjsonの応答が有効であるようです。 DownloadString()の呼び出しによって何か他のものが返される可能性はありますか?正気のために、そのメソッド呼び出しから返されるものを解析せずに正確に出力してみてください。 –

答えて

45

あなたの代わりにJArrayにしようとしましたか?返すオブジェクトの種類に応じて

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

+1おそらくdocoのどこかにあるでしょうが、JSON.Net APIがちょっと直感的だと思うでしょう...この回答に感謝します:-) – Jonno

0

あなたは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”); 
     } 
    } 
} 
2

JSONでループ のために使用してより多くのオブジェクトにすべてのJSONオブジェクト(配列)をカットすることができますマルチと配列の間にカンマが必要複数のオブジェクト。

これはper the JSON standardです。また、ネイティブJSONパーサーの代わりにJSON.net via NuGetを使用することをお勧めします。ただし、余計な膨大さを感じることができない場合を除きます。

{"status":1,"error":null} 
{"status":2,"error":null} 
: - たとえば

は、あなたは2つの別々のJSONオブジェクトを使用してファイルの解析以下は、JSONの規格ごとに動作しないこと(かっこでカプセル化されていない2つのオブジェクトと、2つのオブジェクト間のカンマが欠けています)ファイルから解析

次の3つのJSONオブジェクトの作業を行います(オブジェクト間の複数のオブジェクトとカンマのためのブラケットを持っている):

[{"glossary": {"title": "fun glossary","SeeAlso": ["GML", "XML"]}, 
{"glossary": {"title": "grey glossary","SeeAlso": ["GML", "XML"]}, 
{"glossary": {"title": "blue glossary","SeeAlso": ["GML", "XML"]}]