ですから、私はプログラミングにかなり慣れていませんが、もっと深くプログラミングしたいと思っています。私は最近、JSONのAPIシステムを使用するWebサイト用の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ページの解析が完了して処理されたように見えますが、2番目のページに移動すると、このエラーが発生します。
JsonReaderからのJObjectの読み取りエラー。現在のJsonReaderアイテムはオブジェクトではありません:StartArray。パス ''、行1、位置1。
だから私の質問は、JSONの複数のページまたは呼び出しを解析するにはどうすればよいですか?JSONオブジェクトの各セクション(status
、error
、token
など)をC#文字列に分割する最も簡単な方法は何ですか?
代わりにJArrayを試しましたか?返そうとしているオブジェクトの種類によって異なります
WebClient client = new WebClient();
var data = client.DownloadString("");
var jArray = JArray.Parse(data);
JSONには、配列の括弧と複数のオブジェクト間のコンマが必要です。
これは JSON標準による です。また、ネイティブJSONパーサーの代わりに JSON.net via NuGet を使用することをお勧めします。ただし、それがやり過ぎで、余分な膨張が発生しない場合を除きます。
たとえば、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"]}]
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”);
}
}
}