我到处寻找,甚至JSONiq文档都说“这超出了本文档的范围。”我有一个JSON文件(一个JSON对象的数组)我想导入JSONiq(特别是Zorba,顺便说一句是一个可怕的名字,因为它使互联网搜索信息徒劳无功)用作查询的集合。是否有教程,规范或任何地方告诉我如何做到这一点?
答案 0 :(得分:0)
Zorba支持将文档添加到集合中。这样做的框架记录在案here。但请注意,Zorba是一个内存存储,并且不会超出一个查询的范围,因此如果没有持久层,这将是有限的使用。
如果用例只是查询存储在本地驱动器上的JSON文件,那么使用EXPath's file module和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 }
答案 1 :(得分:0)
为了完整起见,对于Rumble,是Spark上的分布式JSONiq实现,JSON文件通过json-doc()(分布在多行中)或json-line()(在每行一个JSON值,可能数十亿行)。