Main Content

HTTP データ型の変換

MATLAB® の HTTP インターフェイスは、HTTP メッセージで使用されるデータ型と MATLAB 型の間で変換を自動的に行います。

要求メッセージでのデータの変換

ペイロードを伴うメッセージを送信する場合は、MATLAB データを MessageBody オブジェクトの Data プロパティに割り当ててから、RequestMessage オブジェクトの Body プロパティとして送信します。MATLAB データの型はメッセージの HTTP Content-Type によって異なります。Content-Type を指定しない場合、Content-Type の未指定で説明されているとおり、MATLAB によって Content-Type の諸値が仮定されます。

次の表は、Content-Type ヘッダー フィールドで指定する type/subtype プロパティと charset 属性に基づき、MATLAB が Data を要求メッセージのペイロードに変換する方法を示しています。アスタリスク文字 (*) は任意のサブタイプを表します。

Content-Type

MessageBody.Data プロパティの MATLAB 型

application/json

関数 jsonencode を使用して Unicode® 値に変換された Data。MATLAB は、Content-Type ヘッダー フィールドの charset 属性に基づき、関数 unicode2native を使用してこの値を uint8 に変換します。

JSON でエンコードされたテキストが既にある場合は、このテキストを Data プロパティではなく Payload プロパティに割り当てます。MATLAB は charset 属性を使用してこの値を uint8 に変換します。

charset 属性が指定されていない場合、既定の charset 値は UTF-8 です。

text/* (csvxml を除く任意のサブタイプ)

Data が文字配列か string 配列、あるいは文字ベクトルの cell 配列である場合、MATLAB は行ごとにテキストの形状変更と連結を行い、ベクトルを形成します。

Data が他のいずれかの型である場合、MATLAB は関数 string を使用して Data を変換します。その結果生成される string は、charset に基づいて uint8 に変換されます。

charset が指定されていない場合、既定値はサブタイプによって異なります。以下のサブタイプでは、既定値は UTF-8 です。

  • json

  • jtml

  • javascript

  • css

  • calendar

それ以外のすべてのサブタイプについては、MATLAB が charset を決定します。すべての文字が ASCII の範囲にある場合、charset は US-ASCII です。それ以外の場合、charset は UTF-8 です。

メモ

サーバーは、明示的な UTF-8 文字セットなしでは UTF-8 としてエンコードされたテキストの型を正しく解釈できないことがあります。最良の結果が得られるように、データに非 ASCII 文字が含まれている場合は明示的に UTF-8 を指定してください。

image/*

Data は関数 imwrite で受け入れ可能な形式のイメージ データでなければなりません。uint8 への Data の変換はサブタイプによって異なります。サポートされている型と、変換の制御の詳細については、サポートされているイメージ データのサブタイプを参照してください。

イメージ データの変換を制御したり、サブタイプに基づく変換のタイプをオーバーライドするには、cell 配列を使用して imwrite に追加の引数を指定します。イメージ形式の引数 (fmt) を指定する場合、この引数は既定の変換をオーバーライドします。

たとえば、次のコードは圧縮品質 50 で imageData を JPEG に変換し、Content-Type を "image/jpeg" に設定して、指定された url にデータを送信します。

body = MessageBody({imageData,'jpg','Quality',50});
req = RequestMessage('put',ContentTypeField('image/jpeg'),body);
resp = req.send(url);
  • application/xml

  • text/xml

Data が Java® org.w3c.dom.Document オブジェクトの形式の XML DOM である場合、MATLAB は関数 xmlwrite を使用してこれを変換します。

Data が string または文字ベクトルの場合、MATLAB は指定された charset を使用してこれを uint8 に変換します。指定がない場合、既定の charset 値は UTF-8 です。

application/x-www-form-urlencoded

Datamatlab.net.QueryParameter オブジェクトのベクトルである場合、MATLAB はこれを URL エンコードされた string に変換します。string ベクトルまたは文字ベクトルである場合、変更されずそのままになります。

audio/*

Data は関数 audiowrite で受け入れ可能な形式のオーディオ データでなければなりません。オーディオ データの m 行 n 列の行列と、Hz 単位のサンプリング レートとが格納された cell 配列を作成します。この cell 配列に名前と値のペアの引数を追加して、audiowrite に追加の引数を指定することができます。

MATLAB では次のオーディオの型をサポートしています。

  • audio/x-wav

  • audio/wav

  • audio/mp4

  • audio/vnd.wav

  • application/ogg

  • audio/flac

  • application/csv

  • text/csv

  • application/vnd.openxmlformats-
    officedocument.spreadsheetml.sheet

  • application/vnd.ms-excel

Data は関数 writetable に適した形式の table でなければなりません。

csv サブタイプの場合、MATLAB は指定された charset を使用して Data をコンマ区切りのテキストに変換します。既定の charset は US-ASCII です。

他の型の場合、MATLAB は Data を Excel® スプレッドシート データに変換します。

writetable に名前と値のペア引数を追加指定するには、Data と追加の引数が格納された cell 配列を作成します。'FileType' 引数を指定する場合、そのタイプは指定するサブタイプと一致しなければなりません。

Content-Type の未指定

要求メッセージで Content-Type フィールドが指定されない場合、MATLAB は Data プロパティの型に基づいて、タイプ、サブタイプ、charset を割り当てます。この想定された動作では、目的の Content-Type が得られない場合や、タイプを決定できない場合があります。そのため、最良の結果が得られるように、Content-Type を指定してください。次の表は、Data を基に想定される Content-Type を説明しています。このリストにない型を処理できる場合はありますが、リストにない型の動作が将来のリリースで同一に保たれる保証はありません。

MessageBody.Data プロパティの型
(Content-Type 未指定)

結果の Content-Type

string
文字配列
文字ベクトルの cell 配列

text/plain

table

text/csv

最初の要素がテーブルである cell ベクトル

text/csvFileTypecsv の場合。値が 'FileType','csv' である名前と値のペアがベクトル内に存在することもあれば、存在しないこともあります。

application/vnd.openxmlformats-officedocument.spreadsheetml.sheetFileTypespreadsheet の場合。

org.w3c.dom.Documentapplication/xml
uint8 ベクトル

変換せずに、Content-Type ヘッダー フィールドを無視して uint8 ベクトルを送信するには、Data ではなく Payload プロパティを設定します。

変換せずに文字ベースのデータを送信するには、関数 unicode2native を使用します。この関数は、charset 属性を使用して Datauint8 ベクトルに変換します。

型が表にリストされている型のいずれでもない場合、MATLAB はそれが以下の文字ベースの型の 1 つであるかどうかを判定します。

  • text/*

  • charset をもつ任意の型

  • application/*javascript

  • application/vnd.wolfram.mathematica.package

MATLAB はこれらの型を文字列に変換します。charset が指定されている場合はその charset が使用され、それ以外の場合は、text/plain には US-ASCII、アプリケーション タイプには UTF-8、他の型には既定の MATLAB エンコードが使用されます。

応答メッセージのデータの変換

ペイロードをもつメッセージを受信すると、MATLAB は着信バイト ストリーム (MessageBody.Data プロパティ) を適切な MATLAB 型に変換します。

次の表は、受信した Content-Type フィールドの type/subtype プロパティと charset 属性に基づいて、応答メッセージで MATLAB が認識する Content-Type のリストです。MATLAB は HTTPOptions.ConvertResponse プロパティが true (既定値) の場合にのみデータを変換します。この表で、アスタリスク文字 (*) は任意の文字を表します。

応答メッセージの Content-TypeMessageBody.Data プロパティの MATLAB 型
application/json

Data は charset に基づいて文字列に変換され、その後、関数 jsondecode を使用して MATLAB データに変換されます。

image/*

Data は関数 imread を使用してイメージに変換されます。この変換では、既定の引数により、指定したサブタイプが形式として使用されます。imread が複数の値を返す場合、Data は cell 配列です。

サポートされているイメージ データの型については、サポートされているイメージ データのサブタイプを参照してください。サブタイプがこのリストにない場合、そのサブタイプは imwrite に形式として渡されますが、それがサポートされるかどうかは不確定です。

audio/*

Data は関数 audioread を使用して、オーディオ データの m 行 n 列の行列と Hz 単位のサンプリング レートという 2 つの値からなる cell 配列に変換されます。サブタイプにより、audioread で使用される形式が決定されます。サポートされている型は次のとおりです。

  • audio/wav

  • audio/x-wav

  • audio/vnd.wav

  • audio/mp4

  • audio/flac

ogg データにはオーディオだけが格納されているとは限らないため、application/ogg は変換されません。

text/csv
text/コンマ区切り値
application/csv
application/コンマ区切り値

Datareadtable を使用して table に変換されます。この変換では、'FileType'csv が想定され、指定された charset があればその charset、ない場合は MATLAB の既定のエンコードが使用されます。

application/*spreadsheet*

Datareadtable を使用して table に変換されます。'FileType''spreadsheet' であると想定されます。

text/xml
application/xml

Java が使用可能な場合、Data は関数 xmlread を使用して Java org.w3c.dom.Document に変換されます。

Java が使用可能でない場合、DataUTF-8 文字セットを使って text/plain として処理されます。

型が表にリストされている型のいずれでもない場合、MATLAB はそれが以下の文字ベースの型の 1 つであるかどうかを判定します。

  • text/*

  • charset をもつ任意の型

  • application/*javascript

  • application/vnd.wolfram.mathematica.package

MATLAB はこれらの型を文字列に変換します。charset が指定されている場合はその charset が使用され、それ以外の場合は、text/plain には US-ASCII、アプリケーション タイプには UTF-8、他の型には既定の MATLAB エンコードが使用されます。

MATLAB がその型をサポートしていない場合、あるいは HTTPOptions.ConvertResponse プロパティが false に設定されている場合は、以下のようになります。

  • その型が文字ベースの場合、Data には string に変換されたペイロードが含められます。

  • それ以外の場合、Data には生の uint8 ベクトルが含められます。

着信データの変換を試行して失敗した場合 (たとえば、"image/jpeg" データが有効な JPEG データでない場合)、RequestMessage.send メソッドによりスローされた HTTPExceptionHistory プロパティには、uint8 ペイロードに設定された Payload プロパティをもつ ResponseMessage が格納されます。また、型が文字ベースのものである場合、Data は string に変換されたペイロードに設定されます。

サポートされているイメージ データのサブタイプ

次のサブタイプは、関数 imwrite により指定の形式としてサポートされています。たとえば、サブタイプ bmp の形式引数は 'bmp' です。関数 imread は指定のサブタイプを形式として使用して、データを変換します。

サブタイプ

imwriteimread
使用する形式

bmp

'bmp'

gif

'gif'

jpeg

'jpeg'

jp2

'jp2'

jpx

'jpx'

png

'png'

tiff

'tiff'

x-hdf

'hdf'

x-portable-bitmap

'pbm'

x-pcx

'pcx'

x-portable-graymap

'pgm'

x-portable-anymap

'pnm'

x-portable-pixmap

'ppm'

x-cmu-raster

'ras'

x-xwd

'xwd'

参考

| | | | | | | | | | | | |