# データを変換

Talend Cloud API Testerでは、関数を使ってデータを操作できます。

関数では、新しいデータを作成したり、既存のデータを変換したりできます。データを変換する関数は、終了する式の値に適用されます。

## 使用例

Star Wars APIの惑星リストで最初の10個の惑星名を取得する場合は、${"Star-wars API"."Get 10 planet names"."response"."body".jsonPath("$.results[:10].name")}という式を使用します。jsonPathメソッドにより、${"Star-wars API"."Get 10 planet names"."response"."body"}という式の結果が解析されます。

過去1週間のログを取得する場合は、クエリーパラメーターにhttps://myapi.com/logs?from=${timestamp().addTime("WEEK", "-1")}&to=${timestamp()}という式を含むURLを作成します。

現在の日付をISO形式で生成する場合は、${timestamp().formatDate('TIMESTAMP', 'ISO\_8601')}を使用します。

## 定数

${"toto"}のような式を記述する場合、式は以下のように評価されます。

* 値がある場合は、現在の環境の変数totoの値。
* 一致する環境変数がない場合は、リポジトリーのルートレベルのrequest/scenario/service/project toto。
* それ以外の場合は文字列toto。

## データ作成ファンクション

| 関数 | 説明 | 引数 | 例 |
| --- | --- | --- | --- |
| timestamp | 1970年1月1日、00:00:00 GMTから評価された日付までのミリ秒数を返します。 | なし | 式: ${timestamp()}<br><br>考えられる結果: 1505136142950 |
| UUID | UUIDを返します。 | なし | 式: ${uuid()}<br><br>考えられる結果: f5fafd92-2298-4e72-97c9-df4dabaf27d2 |
| random | 0 &lt;= number &lt; maxの範囲内の乱数を返します。 | Maximum: デフォルトは1000000000 | 式: ${random(50)}<br><br>考えられる結果: 42 |
| randomString | 特定の長さのランダムな文字列を返します。<br><br>情報メモ注: この関数はパスワード生成での信頼性が低いため、この目的には使用しないでください。 | Length: 文字列にある文字数。デフォルトは10です。<br><br>[a-z]: 文字列に小文字を含める場合はこのチェックボックスをオンにします。<br><br>[A-Z]: 大文字を含める場合はこのチェックボックスをオンにします。<br><br>[0-9]: 数字を含める場合はこのチェックボックスをオンにします。 | 式: ${randomString(10, true, true, true)}<br><br>考えられる結果: 4ptUKhHYMr |

## データ変換ファンクション

| 関数 | 説明 | 引数 | 例 |
| --- | --- | --- | --- |
| base64 | ベース64にエンコードされます。 | なし | 式: ${"username:password".base64()}<br><br>結果: dXNlcm5hbWU6cGFzc3dvcmQ= |
| lower | デフォルトロケールの規則を使用して、すべての文字を小文字に変換します。 | なし | 式: ${"AbC".lower()}<br><br>結果: abc |
| length | 以下の入力の長さを計算します。<br><br><ul> <li>入力が文字列の場合、文字数</li> <li>JSON配列の項目の数</li> <li>JSONオブジェクトのキーの数</li> </ul> | なし | 式: ${"Star-wars API"."Get 2 planets"."response"."body"}<br><br>結果:<br><br>```<br>{<br>"count":61,<br>"results": [<br>{"name":"Alderaan" },<br>{"name":"Naboo" },<br>{"name":"Hoth" }<br>]<br>}<br>```<br><br>式: ${"Star-wars API"."Get 2 planets"."response"."body".length()}<br><br>結果: 2 式: ${"Star-wars API"."Get 2 planets"."response"."body"."results".length()}<br><br>結果: 3<br><br>式: ${"Star-wars API"."Get 2 planets"."response"."body"."results"."0"."name".length()}<br><br>結果: 8 |
| Substring | 切り捨てられた入力を返します。 | Start: 抽出する最初の文字の位置(デフォルトでは0)。<br><br>End: 省略する最初の文字の位置(デフォルトでは入力の最後)。<br><br>情報メモ注: 最初の文字のインデックスは0です。 | 式: ${"0123456".substring(1)}<br><br>結果: 123456<br><br>式: ${"0123456".substring(1, 2)}<br><br>結果: 1<br><br>式: ${"0123456".substring(0, 4)} 結果: 0123 |
| jsonPath | 指定されたJSONパスselectorを使い、JSON入力から抽出されたエレメントを返します。 | Selector: 入力から抽出するJSONの部分を指すJSONパスセレクター。 | 式: ${"{\"titi\": \"toto\"}".jsonPath("$.titi")}<br><br>結果: toto |
| XPath | 指定されたXPathである selectorを使い、XML入力から抽出されたエレメントを返します。 | Selector: 入力から抽出するXMLの部分を指すXPathセレクター。 | 式: ${"&lt;title lang="en" /&gt;".xPath("//title/@lang")}<br><br>結果: [lang="en"] |
| hmac | [ハッシュベースのメッセージ認証コード](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code)を作成します。 | Cipher: ハッシュ関数(SHA1、SHA224、SHA256、SHA384、SHA512のいずれか)。Secret<br><br>: シークレットキー。<br><br>Output: 出力タイプ(Base64またはHex)。 | 式: ${"test".hmac("sha256", "secret", "Base64")}<br><br>結果: Aymga2LNFrM+tnkr6MYLFY2Jou46h2/Omogeu0iMCRQ=<br><br>式: ${"test".hmac("sha1", "secret", "Hex")}<br><br>結果: 1aa349585ed7ecbd3b9c486a30067e395ca4b356 |
| sha | その入力をハッシュ化します。 | Cipher: ハッシュ関数(SHA1、SHA224、SHA256、SHA384、SHA512のいずれか)。<br><br>Output: 出力タイプ(Base64またはHex)。 | 式: ${"toto".sha("SHA224", "Base64")}<br><br>結果: IcBD7s1+hUI6ctrjwGKitb+g5rNc4/54jJtXpg==<br><br>式: ${"toto".sha("SHA1", "Hex")}<br><br>結果: 0b9c2625dc21ef05f6ad4ddf47c5f203837aa32c |
| md5 | 入力のMD5ハッシュを計算します。 | なし | 式: ${"toto".md5()}<br><br>結果: f71dbe52628a3f83a77ab494817525c6 |
| upper | デフォルトのロケールの規則を使用して、すべての文字を大文字に変換します。 | なし | 式: ${"aBc".upper()}<br><br>結果: ABC |
| String | 入力は引用符で囲みます。 | Quotes: 入力の引用に使用する文字('または"で、デフォルトでは"を使用)。 | 式: ${"toto".string()}<br><br>結果: "toto"<br><br>式: ${"toto".string("\"")}<br><br>結果: "toto"<br><br>式: ${"toto".string("'")}<br><br>結果: 'toto' |
| math | 選択された操作を入力値で実行します。 | Operation: ADD、SUBTRACT、MULTIPLY、DIVIDEのいずれか<br><br>Value: 数字 | 式: ${"7".math("MULTIPLY", "6")}<br><br>結果: 42<br><br>式: ${"3.14".math("ADD", "0.00159265")}<br><br>結果: 3.14159265<br><br>式: ${"100".math("DIVIDE", "-5")}<br><br>結果: -20 |
| addTime | 日付に対し、選択された時間単位の数字を追加または削除します。 | Time unit: YEAR、MONTH、WEEK、DAY、HOUR、MINUTE、SECONDのいずれか<br><br>Value: 整数(負数を使えば時間単位の削除が可能) | 式: ${timestamp().addTime("YEAR", "1")}<br><br>考えられる結果: 1620292896490<br><br>式: ${timestamp().addTime("WEEK", "-2")}<br><br>考えられる結果: 1587547696437 |
| formatDate | 日付を選択された形式に変換します。 | Input format: TIMESTAMPまたはISO\_8601<br><br>Output format: TIMESTAMPまたはISO\_8601 | 式: ${timestamp().formatDate("TIMESTAMP", "ISO\_8601")}<br><br>考えられる結果: 2020-05-06T13:43:22.248Z<br><br>式: ${"2020-04-06T13:44:51.435Z".formatDate("ISO\_8601", "TIMESTAMP")}<br><br>結果: 1586180691435 |