首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONiq -如何将数组转换为序列?

JSONiq -如何将数组转换为序列?
EN

Stack Overflow用户
提问于 2021-02-19 23:06:08
回答 1查看 92关注 0票数 0

使用JSONiq到JavaScript实现的JSONiq,比如我有一个数组

代码语言:javascript
复制
let $a := [1,2,3]

我想把元素作为序列,但是所有这些都返回数组本身-

代码语言:javascript
复制
return $a()
return $a[]
return members($a)

提取数组成员的正确方法是什么?

我的最终目标是将数组中的对象转换为字符串,就像-

代码语言:javascript
复制
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解析器的问题吗?

例如:

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-20 06:30:05

在核心JSONiq语法中,数组被转换为序列(即提取其成员),其中包含空对或方括号,如下所示:

代码语言:javascript
复制
$array[]

示例:

代码语言:javascript
复制
[1, 2, 3, 4][]

返回序列:

代码语言:javascript
复制
(1, 2, 3, 4)

这意味着查询将是:

代码语言:javascript
复制
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导航引入了更方便用户和更直观的语法:

代码语言:javascript
复制
$array[[1]]

对于给定位置的数组成员查找

代码语言:javascript
复制
$object.foo

对于对象查找,给定一个键和

代码语言:javascript
复制
$array[]

用于数组解装箱。

虽然在用户同时需要JSON和XQuery支持的情况下,XQuery的扩展仍然存在(并且被Zorba3.0、IBM等所支持),但核心JSONiq语法是所有专门支持JSON的引擎的主要语法,比如隆隆声

有些引擎(包括Zorba3.0)既支持核心JSONiq语法,又支持XQuery的JSONiq扩展,您可以通过语言版本声明来选择您想要的:

代码语言:javascript
复制
jsoniq version "1.0";
[1, 2, 3, 4][]

代码语言:javascript
复制
xquery version "3.0";
[1, 2, 3, 4]()

Zorba相对宽松,甚至可能在其核心JSONiq实现中同时接受()和[]。

(警告:zorba2.9不支持最新的核心JSONiq语法,特别是try.zorba.io页面仍然运行在zorba2.9上。您需要下载Zorba3.0并在本地运行它(如果您想使用它)。

最后一个注意事项: JSON导航也并行地工作在数组和对象序列上:

代码语言:javascript
复制
(
  {"foo":1},
  {"foo":2},
  {"foo":3},
  {"foo":4}
).foo

返回

代码语言:javascript
复制
(1, 2, 3, 4)

代码语言:javascript
复制
(
  [1, 2],
  [3, 4, 5],
  [6, 7, 8]
)[]

返回

代码语言:javascript
复制
(1, 2, 3, 4, 5, 6, 7, 8)

这使得导航大序列变得非常简单和紧凑:

代码语言:javascript
复制
$collection.foo[].bar[[1]].foobar[].foo
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66286164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档