Поиск в массиве в JSONiq выполняется с помощью двойных квадратных скобок, например:
let $a:=$o.book[[1]].title
return $a
Обратите внимание, что страница try.zorba.io основана на более ранней версии Zorba (2.9), котораяне поддерживает последнюю версию JSONiq (в какой-то момент она должна быть обновлена).В этой более ранней версии поиск в массиве выполнялся с перегрузкой синтаксиса вызова функции:
let $a:=$o.book(1).title
return $a
Если вы хотите использовать стабильную версию JSONiq с ее современным синтаксисом, вы можете загрузить Zorba 3.0 ивыполнять запросы локально.
Семантика [] с простыми квадратными скобками заключается в том, что он фильтрует последовательность, либо с позицией, либо с булевым фильтром, например:
(1, 2, 3, 4)[2]
возвращает2.
Массив отличается от последовательности.Массив можно рассматривать как «коробочную» последовательность, т. Е. (1, 2, 3, 4)
- это последовательность из четырех элементов, а [1, 2, 3, 4]
- это последовательность только из одного элемента: массив, содержащий вложенные 1, 2, 3 и 4.
Вы можете преобразовать массив в последовательность с $o.book[]
, если необходимо ($o.book()
с Zorba 2.9).И вы можете «обернуть» последовательность обратно в массив с помощью [ $sequence ]
.Это немного похоже на открытие или закрытие блока.
Рекурсивно вкладывать могут только массивы, например, [ [1, 2], [3, 4]]
имеет два уровня вложенности, точно так же, как и в случае массивов JSON.Последовательности, однако, не являются вложенными, т. Е. ((1, 2), (3, 4)
совпадает с плоской последовательностью (1, 2, 3, 4) с нулевыми уровнями вложенности.Последовательности элементов являются основными пользователями JSONiq и совместимы с потоковым исполнением (например, фильтрация последовательности миллионов объектов без фактической ее материализации).