に最終更新
ARRAY 型へのキャスト
ARRAY 型は、整数や文字列などの基本要素型を含む配列データの格納と処理に使用します。他の複合型をネストすることもできます。
ARRAY 型へのキャスト
文字列から
動作の変更
バージョン 4.0 より前は、区切り文字の間が空文字列の場合、解析に失敗しました。たとえば、"[,,]" は NULL を返していました。 バージョン 4.0 以降、"[,,]" は非厳格モードで [null, null, null] を返し、厳格モードでエラーを報告します。
厳格モード
BNF 定義
<array> ::= "[" <array-content>? "]" | <empty-array>
<empty-array> ::= "[]"
<array-content> ::= <data-token>(<collection-delim> <data-token>)*
<data-token> ::= <whitespace>* "\"" <inner-sequence> "\"" <whitespace>*
| <whitespace>* "'" <inner-sequence> "'" <whitespace>*
| <whitespace>* <inner-sequence> <whitespace>*
<inner-sequence> ::= .*
<collection-delim> ::= ","
ルールの説明
- 配列のテキスト表現は、左角括弧
[で始まり、右角括弧]で終わる必要があります。 - 空の配列は、そのまま
[]と表します。 - 配列内の要素はカンマで区切ります。
- 配列内の要素の前後には空白を使用できます。
- 配列要素は、対応する一重引用符 (
') または二重引用符 (") で囲むことができます。 - 要素には、null 値を表すために "null" を使用できます。
- 解析時には、
<data-token>に一致する部分に対して、変換先の型 T の解析ルールも適用されます。
上記のルールを満たさない場合、または要素が対応する型の要件を満たさない場合は、エラーが報告されます。
例
| 入力文字列 | 変換結果 | 説明 |
|---|---|---|
| '[]' | [] | 有効な空の配列 |
| ' []' | Error | 配列が角括弧で始まらないため、解析に失敗します |
| '[ ]' | Error | 配列には空白文字列からなる要素が一つあります。空白文字列は int として解析できません |
| "[ 123, 123]" | Cast to Array<int>: [123, 123] | 有効な配列 |
| '[ " 123 " , "456 "]' | Cast to Array<int>: [123, 456] | 有効な配列 |
| '[ 123 , "456" ]' | Cast to Array<int>: [123, 456] | 有効な配列 |
| '[ [] ]' | Cast to Array<Array<int>>: [[]] | 最初の配列の内部要素は ' [] ' で、前後の空白を除去すると有効な配列になります |
| '[ null ,123]' | Cast to Array<int>: [null, 123] | null を含む有効な配列 |
| '[ "null" ,123]' | Error | 文字列 "null" は int 型に変換できません |
注: カンマの間の要素に有効な内容が含まれていることを確認してください。含まれていない場合、解析に失敗します。
非厳格モード
BNF 定義
<array> ::= "[" <array-content>? "]" | <empty-array>
<empty-array> ::= "[]"
<array-content> ::= <data-token>(<collection-delim> <data-token>)*
<data-token> ::= <whitespace>* "\"" <inner-sequence> "\"" <whitespace>*
| <whitespace>* "'" <inner-sequence> "'" <whitespace>*
| <whitespace>* <inner-sequence> <whitespace>*
<inner-sequence> ::= .*
<collection-delim> ::= ","
ルールの説明
- 配列のテキスト表現は、左角括弧
[で始まり、右角括弧]で終わる必要があります。 - 空の配列は、そのまま
[]と表します。 - 配列内の要素はカンマで区切ります。
- 配列内の要素の前後には空白を使用できます。
- 配列要素は、対応する一重引用符 (
') または二重引用符 (") で囲むことができます。 - 要素には、null 値を表すために "null" を使用できます。
- 解析時には、
<data-token>に一致する部分に対して、変換先の型 T の解析ルールも適用されます。
配列の形式が上記の BNF 形式を満たさない場合は、NULL が返されます。 要素が対応する型の要件を満たさない場合は、その要素の位置が null に設定されます。
例
| 入力文字列 | 変換結果 | 説明 |
|---|---|---|
| '[]' | [] | 有効な空の配列 |
| ' []' | NULL | 配列が角括弧で始まらないため、解析に失敗します |
| '[ ]' | [null] | 配列には空白文字列からなる要素が一つあります。空白文字列は int として解析できません |
| "[ 123, 123]" | Cast to Array<int>: [123, 123] | 有効な配列 |
| '[ " 123 " , "456 "]' | Cast to Array<int>: [123, 456] | 有効な配列 |
| '[ 123 , "456" ]' | Cast to Array<int>: [123, 456] | 有効な配列 |
| '[ [] ]' | Cast to Array<Array<int>>: [[]] | 最初の配列の内部要素は ' [] ' で、前後の空白を除去すると有効な配列になります |
| '[ null ,123]' | Cast to Array<int>: [null, 123] | null を含む有効な配列 |
| '[ "null" ,123]' | Cast to Array<int>: [null, 123] | 文字列 "null" は int 型に変換できないため、null に変換されます |
Array<Other Type> から
厳格モード
ルールの説明
Array の各要素に対して、Other Type から Type へのキャストを実行します。このキャストにも厳格モードが適用されます。
例
| 入力配列 | 変換結果 | 説明 |
|---|---|---|
| ["123", "456"] | Cast to Array<int>: [123, 456] | "123" と "456" は Int に変換できます |
| ["abc", "123"] | Error | "abc" は Int に変換できません |
| [null, "123"] | Cast to Array<int>: [null, 123] | null のキャスト結果も null です |
非厳格モード
ルールの説明
Array の各要素に対して、Other Type から Type へのキャストを実行します。このキャストにも非厳格モードが適用されます。
例
| 入力配列 | 変換結果 | 説明 |
|---|---|---|
| ["123", "456"] | Cast to Array<int>: [123, 456] | "123" と "456" は Int に変換できます |
| ["abc", "123"] | Cast to Array<int>: [null, 123] | "abc" は Int に変換できないため、null に変換されます |
| [null, "123"] | Cast to Array<int>: [null, 123] | null のキャスト結果も null です |