Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Removed |../../../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

...

データのどの部分でも読み込むことが可能です。これは名前またはインデックスで参照できます。

...


XPRIM_JsonReader

...

は速度が速く、前方向専用のリーダーです。テープ上のデータを読むのと同じ手法で

...

JSON データを読み込みます。
JSON データは順番に読み込まれますので、JSON データの異なる領域に直接アクセスすることはできません。(データベース・サービスから戻されたデータなどの)

...

大きな

...

JSON

...

データを読み込む場合、XPRIM_JsonReader

...

を利用するようにしてください。
(XPRIM_RandomAccessJsonReader

...

が使用するメモリ量は

...

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

...


           }
       }
   ]
}

ここで注目するのは、latlong の値です。これは、 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


次は: 無効な応答を確認

...