■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形式であるはずなのに,なぜ異なる結果となるのでしょうか?
・上記コードで修正すべき点があるならば,それはどこなのでしょうか?
まだまだ不勉強であり至らない点も多い若輩者ではありますが,ぜひとも皆様のお知恵を貸してはいただけないでしょうか。
|
|