我到处看了看,甚至 JSONiq 文档都说“这超出了本文档的范围”。我有一个 JSON 文件(一组 JSON 对象),我想导入 JSONiq(尤其是 Zorba,顺便说一下,这是一个糟糕的名字,因为它使 Internet 搜索信息无效)用作查询的集合。是否有教程、规范或任何地方告诉我如何做到这一点?
问问题
494 次
2 回答
0
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"
if /path/to/document.json
contains
{ "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 }
于 2018-06-12T08:02:41.627 回答
0
为了完整起见,对于Spark 上的分布式 JSONiq 实现Rumble ,使用 json-doc() (当分布在多行时)或 json-line() (其中每行有一个 JSON 值,on可能有数十亿行)。
于 2020-04-16T13:25:01.027 回答