C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 172 を表示中)
■99176 / )  json形式のデータの取得ができない場合がある
□投稿者/ 紫モップ (1回)-(2022/02/17(Thu) 04:00:45)

分類:[VB.NET/VB2005 以降] 

紫モップと申します。
Visual Basic2022から始めた初心者です。ここで質問をさせていただくのも初めて故至らない点は多くあると思いますが,どうぞよろしくお願いいたします。

開発環境
Visual Studio 2022
Windowsフォームアプリ
NuGetよりNewtonsoft.Jsonをインストール済み

デザイン:Form1, Button1 のみ

問題点:json形式のデータが取得できない場合がある

状況:
現在,気象庁のサイト上にある気象データ(json形式)を呼び出して内部の各種値を取り出そうと試みております。
不明な点を調べながらコードを書いていった結果、以下のコードを用いることでサイトから一週間分の気象予測データ(および各値)を取得することができました。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim url As String = "https://www.jma.go.jp/bosai/forecast/data/overview_week/130000.json"      '1週間分のデータが載っているページ

        Using client As New System.Net.Http.HttpClient()

            Using response As System.Net.Http.HttpResponseMessage = client.GetAsync(url).Result

                Dim responseBody As String = response.Content.ReadAsStringAsync().Result        'レスポンス全体を文字列で取得

                '文字列をJObjectに変換。後述のエラーが発生する場所
                Dim oResponse As Newtonsoft.Json.Linq.JObject = CType(Newtonsoft.Json.JsonConvert.DeserializeObject(responseBody), Newtonsoft.Json.Linq.JObject)

                Dim publishingOffice As String = oResponse("publishingOffice").ToString     '各値を取得

                MessageBox.Show($"発行 = {publishingOffice}")         '値を出力

            End Using

        End Using

    End Sub

End Class

(参考にさせていただいたサイト:https://www.umayadia.com/vbsample/VBdotNet-Samples201/Sample280InvokeRestWebAPI.htm#A2 GET のWebAPIを呼び出してJSONの戻り値を解析する より)


しかし,上記コードのページ名をhttps://www.jma.go.jp/bosai/forecast/data/forecast/130000.json(より詳細な気象データが載っているページ。同じくjson形式)に変更して
実行すると以下のようなエラーが発生し,データを取得することができませんでした。


ユーザーが処理していない例外
System.InvalidCastException: 'Unable to cast object of type 'Newtonsoft.Json.Linq.JArray' to type 'Newtonsoft.Json.Linq.JObject'.'


恥ずかしながらエラーについて調べても理解が及ばず,自分の力では解決することが難しそうであったため,以下の点を教えていただきたく参上した次第です。

・ページは違えど同じjson形式であるはずなのに,なぜ異なる結果となるのでしょうか?
・上記コードで修正すべき点があるならば,それはどこなのでしょうか?

まだまだ不勉強であり至らない点も多い若輩者ではありますが,ぜひとも皆様のお知恵を貸してはいただけないでしょうか。




返信 編集キー/


管理者用

- Child Tree -