使用JSONiq到JavaScript实现的JSONiq,比如我有一个数组
let $a := [1,2,3]我想把元素作为序列,但是所有这些都返回数组本身-
return $a()
return $a[]
return members($a)提取数组成员的正确方法是什么?
我的最终目标是将数组中的对象转换为字符串,就像-
let $updates := [
{"address": "%Q0.1", "keys": ["OUT2", "output.2"], "value": 0},
{"address": "%Q0.7", "keys": ["OUT8", "output.8"], "value": 1}
]
for $update in $updates()
return "<timestamp>|address|" || $update.address,以便将JSON对象数组转换为一组字符串,如<timestamp>|address|%Q0.7等
编辑:使用佐尔巴,$a()语法似乎运行良好--这是节点jsoniq解析器的问题吗?
例如:
jsoniq version "1.0";
let $updates := [
{"address": "%Q0.1", "keys": ["OUT2", "output.2"], "value": 0},
{"address": "%Q0.7", "keys": ["OUT8", "output.8"], "value": 1}
]
for $update in $updates()
return current-dateTime() || "|address|" || $update.address返回
2021-02-19T23:10:13.434273Z(地址:Q0.1 2021-02-19T23:10:13.434273Z地址:Q0.7)
发布于 2021-02-20 06:30:05
在核心JSONiq语法中,数组被转换为序列(即提取其成员),其中包含空对或方括号,如下所示:
$array[]示例:
[1, 2, 3, 4][]返回序列:
(1, 2, 3, 4)这意味着查询将是:
let $updates := [
{"address": "%Q0.1", "keys": ["OUT2", "output.2"], "value": 0},
{"address": "%Q0.7", "keys": ["OUT8", "output.8"], "value": 1}
]
for $update in $updates[]
return "<timestamp>|address|" || $update.address带有空括号的类似函数调用的表示法可以追溯到JSONiq的早期,因为它主要是作为XQuery的扩展设计的,映射和数组使用函数调用($object("foo")、$array()、$array(2))导航。然而,随着JSONiq开始拥有自己的生命,为JSON导航引入了更方便用户和更直观的语法:
$array[[1]]对于给定位置的数组成员查找
$object.foo对于对象查找,给定一个键和
$array[]用于数组解装箱。
虽然在用户同时需要JSON和XQuery支持的情况下,XQuery的扩展仍然存在(并且被Zorba3.0、IBM等所支持),但核心JSONiq语法是所有专门支持JSON的引擎的主要语法,比如隆隆声。
有些引擎(包括Zorba3.0)既支持核心JSONiq语法,又支持XQuery的JSONiq扩展,您可以通过语言版本声明来选择您想要的:
jsoniq version "1.0";
[1, 2, 3, 4][]与
xquery version "3.0";
[1, 2, 3, 4]()Zorba相对宽松,甚至可能在其核心JSONiq实现中同时接受()和[]。
(警告:zorba2.9不支持最新的核心JSONiq语法,特别是try.zorba.io页面仍然运行在zorba2.9上。您需要下载Zorba3.0并在本地运行它(如果您想使用它)。
最后一个注意事项: JSON导航也并行地工作在数组和对象序列上:
(
{"foo":1},
{"foo":2},
{"foo":3},
{"foo":4}
).foo返回
(1, 2, 3, 4)而
(
[1, 2],
[3, 4, 5],
[6, 7, 8]
)[]返回
(1, 2, 3, 4, 5, 6, 7, 8)这使得导航大序列变得非常简单和紧凑:
$collection.foo[].bar[[1]].foobar[].foohttps://stackoverflow.com/questions/66286164
复制相似问题