Zorba поддерживает добавление документов в коллекцию.Основа для этого задокументирована здесь .Обратите внимание, однако, что Zorba является хранилищем памяти и не сохранит ничего, выходящего за рамки одного запроса, поэтому он имеет ограниченное использование без слоя постоянства.
Если сценарий использования - просто запрос JSONфайл хранится на вашем локальном диске, тогда может быть проще использовать файловый модуль EXPath , а также parse-json , например:
jsoniq version "1.0";
import module namespace file = "http://expath.org/ns/file";
let $my-object := parse-json(file:read-text("/path/to/document.json"))
return $my-object.foo
Вышезапрос возвращает "bar"
, если /path/to/document.json
содержит
{ "foo" : "bar" }
parse-json
, предоставляет дополнительные параметры для анализа документов с несколькими объектами (линиями JSON и т. д.).
Для опытных пользователей этокак использовать коллекции, чтобы не читать файлы каждый раз:
jsoniq version "1.0";
import module namespace file = "http://expath.org/ns/file";
import module namespace ddl = "http://zorba.io/modules/store/dynamic/collections/ddl";
import module namespace dml = "http://zorba.io/modules/store/dynamic/collections/dml";
(: Populating the collection :)
variable $my-collection := QName("my-collection");
ddl:create($my-collection, parse-json(file:read-text("/tmp/doc.json")));
(: And now the query :)
for $object in dml:collection($my-collection)
group by $value := $object.foo
return {
"value" : $value,
"count" : count($object)
}
Это /tmp/doc.json
:
{ "foo" : "bar" }
{ "foo" : "bar" }
{ "foo" : "foo" }
{ "foo" : "foobar" }
{ "foo" : "foobar" }
И приведенный выше запрос возвращает:
{ "value" : "bar", "count" : 2 }
{ "value" : "foobar", "count" : 2 }
{ "value" : "foo", "count" : 1 }