Page History
[ |../../../index.htm#lansa/webserviceseng01_0085.htm]
現在地: Webサービス > Webサービスの利用 > 応答の読み込み > 応答本文の読み込み
...
応答本文には、求める必要な情報が含まれています。例えば、HTTP 要求を実行して、Google マップを使って地理座標を取得する場合、結果の座標は応答本文内に返されます。応答本文には、求める必要な情報が含まれています。例えば、HTTP 要求を実行して、Google マップを使って地理座標を取得する場合、結果の座標は応答本文内に返されます。
(XPRIM_HttpRequest オブジェクトの) 応答オブジェクトの read メソッドの 1 つを使ってこの応答本文を読み込むことができます。
- AsString (応答本文を生文字列として取得)
- AsFile (応答本文をファイルに入れ、ファイルのパスを取得)
- AsJsonObject (応答本文を JSON オブジェクトとして取得)
- AsJsonArray (応答本文を JSON 配列として取得)
...
ほとんどの Web サービス、特に REST Web サービスは応答を JSON として返します。以前はXML が一般的な形式でしたが、最近は XML の影が薄くなり、XML データを送受信するサービスはほとんど見られなくなりました。
JSON 応答を効率よく読み込むには XPRIM_RandomAccessJsonReader または XPRIM_JsonReader を利用してください。
| Info |
|---|
XPRIM_RandomAccessJsonReader |
...
を使って、自身の |
...
JSON |
...
データのどの部分でも読み込むことが可能です。これは名前またはインデックスで参照できます。 |
...
|
...
は速度が速く、前方向専用のリーダーです。テープ上のデータを読むのと同じ手法で |
...
JSON データを読み込みます。 |
...
大きな |
...
JSON |
...
データを読み込む場合、XPRIM_JsonReader |
...
を利用するようにしてください。 |
...
が使用するメモリ量は |
...
JSON |
...
データのサイズに相関することに対して) |
...
これはメモリ使用量が非常に少ないです。 |
...
|
...
XPRIM_JsonReader |
...
に対して |
...
XPRIM_RandomAccessJsonReader |
...
を選択するのが、使いやすいでしょう。JSON |
...
データが非常に大きい場合を除き、常に |
...
XPRIM_RandomAccessJsonReader |
...
を利用するようにしてください。 |
例 - 応答本文を JSON として読み込む
Google マップのジオコーディング要求を実行すると、次のような応答を受け取ります。 \{ マップのジオコーディング要求を実行すると、次のような応答を受け取ります。
{
"results" :
...
[
{
"formatted_address" : "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
...
"geometry" :
...
{
"location" :
...
{
"lat" : 37.4224764,
...
"lng" : -122.0842499
...
}
}
]
}
ここで注目するのは、lat と long の値です。これは、 results (element 1) >> geometry >> location 経由でアクセスできます。
Define_Com Class(#XPRIM_HttpRequest) Name(#Req)
...
Define_Com Class(#XPRIM_RandomAccessJsonReader) Name(#Reader)
...
...
...
#Req.DoGet Url('https://maps.googleapis.com/maps/api/geocode/json?...')
* 要求が正しく実行されたか確認
If (#Req.Response.IsSuccessHttpStatusCode)
...
* 応答のJSON リーダー・ソースを HTTP 要求から設定
...
#Reader.SetSourceHttpResponse HttpResponse(#Req.Response)
...
* ('lat' と 'lng' 値が含まれている) 'location' オブジェクトにナビゲート
...
* ナビゲーション・パスを指定して、'location' エレメントへナビゲート
...
* パスの名前とインデックスはスラッシュで区切る
...
#Reader.BeginObjectWithPath Path('results/1/geometry/location')
...
* 緯度と経度の値を取得
...
#Latitude := #Reader.ReadNumberWithName('lat')
...
#Longitude := #Reader.ReadNumberWithName('lng')
...
* "BeginObject" を "EndObject" で終了
...
#Reader.EndObject
Endif
次は: 無効な応答を確認
...