Приведение к типам ARRAY
Тип ARRAY используется для хранения и обработки массивов данных, которые могут содержать элементы различных базовых типов, например целые числа, строки и т. д., а также вложенные сложные типы.
Приведение к ARRAY
Из String
До версии 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.
Если эти правила не соблюдаются или элементы не соответствуют требованиям соответствующего типа, возникает ошибка.
Примеры
| Входная строка | Результат преобразования | Комментарий |
|---|---|---|
| '[]' | [] | Корректный пустой массив |
| ' []' | Ошибка | Массив не начинается со скобки, разбор завершается ошибкой |
| '[ ]' | Ошибка | Массив содержит один элемент, строку из пробелов; такую строку невозможно разобрать как 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]' | Ошибка | Строку "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]" | Приведение к 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 Type>
Строгий режим
Описание правил
Для каждого элемента Array выполняется приведение из типа Other Type к типу Type. Это приведение также выполняется в строгом режиме.
Примеры
| Входной массив | Результат преобразования | Комментарий |
|---|---|---|
| ["123", "456"] | Приведение к Array<int>: [123, 456] | "123" и "456" можно преобразовать в Int |
| ["abc", "123"] | Ошибка | "abc" невозможно преобразовать в Int |
| [null, "123"] | Приведение к Array<int>: [null, 123] | Результат приведения null по-прежнему равен null |
Нестрогий режим
Описание правил
Для каждого элемента Array выполняется приведение из типа Other Type к типу Type. Это приведение также выполняется в нестрогом режиме.
Примеры
| Входной массив | Результат преобразования | Комментарий |
|---|---|---|
| ["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 по-прежнему равен null |