質問: json.horoscope.????; // ここがわかない } ``` 上記までできているのですが、いざ一つ一つの項目を取得する方法がわかりません。 サイトを見ると、『content』や『rank』や『sign』等があるようなのですが、 どうすれば良いのでしょうか。 初歩的な質問で申し訳ありませんが、ご教授いただけますよう、お願いいたします。
回答: 該当APIで「`content`」等の項目を得るには ``` json.horoscope["yyyy/MM/dd"][n].content ``` のように日付とインデックスの階層を経る必要があるようです。 ただDynamicJsonは内部的に`XElement` (XML)でデータを保持しているため、XML要素名としては無効な **`yyyy/MM/dd`というインデックスにアクセスすることは出来ません**。 標準のJSONパーサーである`Newtonsoft.Json`では以下のような手順になります。なおこのライブラリでは直接`Stream`を処理できないため`StreamReader`を継ぎ足していますが、`string`を得られる通信方法に変えた方がよいでしょう。 ``` // 日付を2回使うので変数化 var d = DateTime.Now.ToString("yyyy/MM/dd"); var url = "http://api.jugemkey.jp/api/horoscope/free/" + d; var req = WebRequest.Create(url); using (var res = req.GetResponse()) using (var s = res.GetResponseStream()) using (var sr = new StreamReader(s)) // 追加 { dynamic json = JObject.Parse(sr.ReadToEnd()); // DynamicJsonから変更 Console.WriteLine(json.horoscope[d][0].content); } ```