在 jsoniq 中访问对象数组中的对象
access object in an object array in jsoniq
JSONIQ 的新手,使用 zorba 到目前为止我想做的是从 JSONIQ 的对象数组中的索引对象中提取一些信息。这是到目前为止的代码。
jsoniq version "1.0";
let $bstore:={
"bookstore":
{
"book":[
{
"category":"cooking",
"title":"Everyday Italian",
"author":"Giada De Laurentiis",
"year":"2005",
"price":"30.00"
},
{
"category":"web",
"title":"XQuery Kick Start",
"author":["James McGovern","Per Bothner","Kurt Cagle","James Linn","Vaidyanathan Nagarajan"],
"year":"2003",
"price":"49.99"
}
]
}
}
for $o in $bstore.bookstore
let $a:=$o.book
return $a.title
我想做的是 return 书名、作者和价格。
我能够 return 数组,但每当我键入索引时。
let $a:=$o.book[1].title
return $a
我没有得到任何结果。我的预期输出是
Everyday Italian
如有任何帮助,我们将不胜感激。
我最初计划遍历对象数组以打印出对象中的数据。对于 JSONIQ,我发现我需要用括号括起数组名称,在这种情况下为 book()。
我下面的代码应该遍历书名、作者和价格。
jsoniq version "1.0";
let $bstore:={
"bookstore":
{
"book":[
{
"category":"cooking",
"title":"Everyday Italian",
"author":"Giada De Laurentiis",
"year":"2005",
"price":"30.00"
},
{
"category":"web",
"title":"XQuery Kick Start",
"author":["James McGovern","Per Bothner","Kurt Cagle","James Linn","Vaidyanathan Nagarajan"],
"year":"2003",
"price":"49.99"
}
]
}
}
for $o in $bstore.bookstore.book()
return
{
"title":$o.title,
"author":$o.author,
"price":$o.price
}
代码可以在Zorba进行测试。
输出如下图:
{ "title" : "Everyday Italian", "author" : "Giada De Laurentiis", "price" : "30.00" }{ "title" : "XQuery Kick Start", "author" : [ "James McGovern", "Per Bothner", "Kurt Cagle", "James Linn", "Vaidyanathan Nagarajan" ], "price" : "49.99" }
JSONiq 中的数组查找是使用双方括号完成的,如下所示:
let $a:=$o.book[[1]].title
return $a
但是请注意,try.zorba.io 页面基于 Zorba (2.9) 的早期版本,不支持最新版本的 JSONiq(它应该在某些时候升级观点)。在这个早期版本中,数组查找曾经是通过重载函数调用语法完成的:
let $a:=$o.book(1).title
return $a
如果您想使用稳定版的 JSONiq 及其最新的语法,您可以下载 Zorba 3.0 并在本地执行查询。
带有简单方括号的 [] 的语义是它通过一个序列进行过滤,使用位置或布尔过滤器,例如:
(1, 2, 3, 4)[2]
returns 2.
数组不同于序列。数组可以看作是一个 "boxed" 序列,即 (1, 2, 3, 4)
是一个包含四项的序列,但是 [1, 2, 3, 4]
是一个只有一项的序列:包含嵌套的 1, 2 的数组, 3 和 4.
如果需要,您可以使用 $o.book[]
将数组转换为序列(Zorba 2.9 为 $o.book()
)。您可以 "wrap" 将序列返回到带有 [ $sequence ]
的数组中。这有点像打开或关闭一个盒子。
只有数组可以递归嵌套,例如,[ [1, 2], [3, 4]]
有两层嵌套,这与 JSON 数组的预期完全一样。然而,序列不嵌套,即 ((1, 2), (3, 4)
与平面序列 (1, 2, 3, 4) 相同,具有零级嵌套。项目序列是 JSONiq 的主要公民,并且与流式执行兼容(例如,过滤数百万个对象的序列而不实际实现它)。
JSONIQ 的新手,使用 zorba 到目前为止我想做的是从 JSONIQ 的对象数组中的索引对象中提取一些信息。这是到目前为止的代码。
jsoniq version "1.0";
let $bstore:={
"bookstore":
{
"book":[
{
"category":"cooking",
"title":"Everyday Italian",
"author":"Giada De Laurentiis",
"year":"2005",
"price":"30.00"
},
{
"category":"web",
"title":"XQuery Kick Start",
"author":["James McGovern","Per Bothner","Kurt Cagle","James Linn","Vaidyanathan Nagarajan"],
"year":"2003",
"price":"49.99"
}
]
}
}
for $o in $bstore.bookstore
let $a:=$o.book
return $a.title
我想做的是 return 书名、作者和价格。 我能够 return 数组,但每当我键入索引时。
let $a:=$o.book[1].title
return $a
我没有得到任何结果。我的预期输出是
Everyday Italian
如有任何帮助,我们将不胜感激。
我最初计划遍历对象数组以打印出对象中的数据。对于 JSONIQ,我发现我需要用括号括起数组名称,在这种情况下为 book()。
我下面的代码应该遍历书名、作者和价格。
jsoniq version "1.0";
let $bstore:={
"bookstore":
{
"book":[
{
"category":"cooking",
"title":"Everyday Italian",
"author":"Giada De Laurentiis",
"year":"2005",
"price":"30.00"
},
{
"category":"web",
"title":"XQuery Kick Start",
"author":["James McGovern","Per Bothner","Kurt Cagle","James Linn","Vaidyanathan Nagarajan"],
"year":"2003",
"price":"49.99"
}
]
}
}
for $o in $bstore.bookstore.book()
return
{
"title":$o.title,
"author":$o.author,
"price":$o.price
}
代码可以在Zorba进行测试。
输出如下图:
{ "title" : "Everyday Italian", "author" : "Giada De Laurentiis", "price" : "30.00" }{ "title" : "XQuery Kick Start", "author" : [ "James McGovern", "Per Bothner", "Kurt Cagle", "James Linn", "Vaidyanathan Nagarajan" ], "price" : "49.99" }
JSONiq 中的数组查找是使用双方括号完成的,如下所示:
let $a:=$o.book[[1]].title
return $a
但是请注意,try.zorba.io 页面基于 Zorba (2.9) 的早期版本,不支持最新版本的 JSONiq(它应该在某些时候升级观点)。在这个早期版本中,数组查找曾经是通过重载函数调用语法完成的:
let $a:=$o.book(1).title
return $a
如果您想使用稳定版的 JSONiq 及其最新的语法,您可以下载 Zorba 3.0 并在本地执行查询。
带有简单方括号的 [] 的语义是它通过一个序列进行过滤,使用位置或布尔过滤器,例如:
(1, 2, 3, 4)[2]
returns 2.
数组不同于序列。数组可以看作是一个 "boxed" 序列,即 (1, 2, 3, 4)
是一个包含四项的序列,但是 [1, 2, 3, 4]
是一个只有一项的序列:包含嵌套的 1, 2 的数组, 3 和 4.
如果需要,您可以使用 $o.book[]
将数组转换为序列(Zorba 2.9 为 $o.book()
)。您可以 "wrap" 将序列返回到带有 [ $sequence ]
的数组中。这有点像打开或关闭一个盒子。
只有数组可以递归嵌套,例如,[ [1, 2], [3, 4]]
有两层嵌套,这与 JSON 数组的预期完全一样。然而,序列不嵌套,即 ((1, 2), (3, 4)
与平面序列 (1, 2, 3, 4) 相同,具有零级嵌套。项目序列是 JSONiq 的主要公民,并且与流式执行兼容(例如,过滤数百万个对象的序列而不实际实现它)。