掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
APIから取得したJSONから特定の値を取得する方法について (ID:150927)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
環境はDelphi11.3 Enterpriseで、FMXのTRESTRequestで、駅すぱあとのAPI(駅名=橋)を呼び出し、 結果をTRESTResponseで受け取っています。JSONは次の通りです。 { "ResultSet": { "apiVersion": "1.27.0.0", "max": "1", "offset": "1", "engineVersion": "202304_03a", "Point": { "Station": { "code": "23281", "Name": "橋本(神奈川県)", "Type": "train", "Yomi": "はしもと" }, "Prefecture": { "code": "14", "Name": "神奈川県" }, "GeoPoint": { "longi": "139.20.51.0", "lati": "35.35.30.0", "longi_d": "139.3475", "lati_d": "35.591667", "gcs": "tokyo" } } } } ※検索結果が複数件ヒットする場合は、上記のJSONのPointより下(Stationから)がネストされます 受け取ったJSONから必要な情報はNameの値だけなので、次の通りコーディングしました。 procedure TForm1.Analize(res: TRESTResponse); var JSONObj: TJSONObject; PointArray: TJSONArray; staName: String; begin JSONObj := res.JSONValue as TJSONObject; PointArray := (JSONObj.GetValue('ResultSet') as TJSONObject).GetValue('Point') as TJSONArray; for var i := 0 to PointArray.Count - 1 do begin staName := PointArray.Items[i].GetValue<TJSONObject>('Station').GetValue('Name').Value; ShowMessage(staName); end; end; これを実行しますと、PointArrayを取得するところで、EInvalidCast例外が発生してしまいます。 但し、検索結果が複数件になる場合は、例外は発生しません。 何か誤っている様でしたら理由を教えて頂けませんでしょうか。 尚、RESTデバッガを使用し、JSONルートにResultSet.Pointを指定すると、結果が1件でも複数件でも 正しく取得されます。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.