如何将JSON文件导入JSONiq集合?

时间:2018-06-11 23:02:29

标签: json jsoniq

我到处寻找,甚至JSONiq文档都说“这超出了本文档的范围。”我有一个JSON文件(一个JSON对象的数组)我想导入JSONiq(特别是Zorba,顺便说一句是一个可怕的名字,因为它使互联网搜索信息徒劳无功)用作查询的集合。是否有教程,规范或任何地方告诉我如何做到这一点?

2 个答案:

答案 0 :(得分:0)

Zorba支持将文档添加到集合中。这样做的框架记录在案here。但请注意,Zorba是一个内存存储,并且不会超出一个查询的范围,因此如果没有持久层,这将是有限的使用。

如果用例只是查询存储在本地驱动器上的JSON文件,那么使用EXPath's file moduleparse-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值,可能数十亿行)。