メインコンテンツまでスキップ
バージョン: 26.x

ARRAY型へのキャスト

ARRAYタイプは配列データの保存と処理に使用され、整数や文字列などの様々な基本要素タイプを含むことができ、その他の複合タイプをネストすることも可能です。

ARRAYへのキャスト

FROM String

動作変更

バージョン4.0より前では、区切り文字間の空文字列の解析が失敗していました。例えば"[,,]"はNULLを返していました。 バージョン4.0以降、"[,,]"は非strictモードでは[null, null, null]を返し、strictモードではエラーを報告します。

Strict Mode

BNF Definition
<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> ::= ","
ルールの説明
  1. 配列のテキスト表現は左角括弧[で始まり、右角括弧]で終わる必要があります。
  2. 空の配列は直接[]として表現されます。
  3. 配列内の要素はカンマで区切られます。
  4. 配列内の要素の前後に空白文字を含めることができます。
  5. 配列要素は対応する単一引用符(')または二重引用符(")で囲むことができます。
  6. 要素は"null"を使用してnull値を表現できます。
  7. 解析中、<data-token>に一致する部分は、対象の型Tの解析ルールを継続して適用します。

上記のルールが満たされない場合、または要素が対応する型の要件を満たさない場合、エラーが報告されます。

入力文字列変換結果コメント
'[]'[]有効な空の配列
' []'Error配列が角括弧で始まっていないため、解析が失敗
'[ ]'Error配列に1つの要素があり、それは空白文字の文字列。空白文字列はintとして解析できないため失敗
"[ 123, 123]"Array<int>にキャスト: [123, 123]有効な配列
'[ " 123 " , "456 "]'Array<int>にキャスト: [123, 456]有効な配列
'[ 123 , "456" ]'Array<int>にキャスト: [123, 456]有効な配列
'[ [] ]'Array<Array<int>>にキャスト: [[]]最初の配列の内部要素は' [] 'で、トリミング後に有効な配列になる
'[ null ,123]'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> ::= ","
ルール説明
  1. 配列のテキスト表現は左括弧 [ で始まり、右括弧 ] で終わる必要があります。
  2. 空の配列は [] として直接表現されます。
  3. 配列内の要素はカンマで区切られます。
  4. 配列内の要素の前後に空白を含めることができます。
  5. 配列要素は対応する単一引用符(')または二重引用符(")で囲むことができます。
  6. 要素は "null" を使用してnull値を表現できます。
  7. パース中、<data-token> にマッチする部分は、対象型Tのパースルールを継続して適用します。

配列形式が上記のBNF形式を満たさない場合、NULLが返されます。 要素が対応する型の要件を満たさない場合、対応する要素位置はnullに設定されます。

入力文字列変換結果コメント
'[]'[]有効な空配列
' []'NULL配列が括弧で開始されていない、パース失敗
'[ ]'[null]配列に1つの要素があり、空白文字列;空白文字列はintとしてパース失敗
"[ 123, 123]"Array<int>へキャスト: [123, 123]有効な配列
'[ " 123 " , "456 "]'Array<int>へキャスト: [123, 456]有効な配列
'[ 123 , "456" ]'Array<int>へキャスト: [123, 456]有効な配列
'[ [] ]'Array<Array<int>>へキャスト: [[]]最初の配列の内部要素は ' [] ' で、トリミング後に有効な配列となる
'[ null ,123]'Array<int>へキャスト: [null, 123]nullを含む有効な配列
'[ "null" ,123]'Array<int>へキャスト: [null, 123]文字列 "null" はint型に変換できない、nullに変換

Array<Other タイプ>から

Strictモード

ルール説明

Array内の各要素に対して、Other TypeからTypeへのCastが実行されます。Castも厳密モードで行われます。

入力Array変換結果コメント
["123", "456"]Array<int>へキャスト: [123, 456]"123" と "456" はIntに変換可能
["abc", "123"]Error"abc" はIntに変換できない
[null, "123"]Array<int>へキャスト: [null, 123]nullのCast結果は引き続きnull

Non-Strictモード

ルール説明

Array内の各要素に対して、Other TypeからTypeへのCastが実行されます。Castも非厳密モードで行われます。

入力Array変換結果コメント
["123", "456"]Array<int>へキャスト: [123, 456]"123" と "456" はIntに変換可能
["abc", "123"]Array<int>へキャスト: [null, 123]"abc" はIntに変換できない、nullに変換
[null, "123"]Array<int>へキャスト: [null, 123]nullのCast結果は引き続きnull