我需要编写一个JSONiq表达式,该表达式仅列出价格至少为3的产品名称。这是我在 XQuery 部分中键入的JSON文件:
{ "supermarket_visit":{
"date":"08032019",
"bought":[
"item",{
"type":"confectionary",
"item_name":"Kit_Kat",
"number": 3,
"individual_price": 3.5
},
"item",{
"type":"drinks",
"item_name":"Coca_Cola",
"number": 2,
"individual_price": 3
},
"item",{
"type":"fruits",
"item_name":"apples",
"number": "some"
}
],
"next_visit":[
"item",{
"type":"stationary",
"item_name":"A4_paper",
"number": 1
},
"item",{
"type":"stationary",
"item_name":"pen",
"number": 2
}
]
}
}
这是我的JSONiq Xquery JSONiq命令,我真的不知道在try.zorba.io中键入什么:
let $x := find("supermarket_visit")
for $x in $supermarket.bought let $i := $x.item
where $i.individual_price <=3
return $i.item_name
我在try.zorba.io中遇到了很多错误,并且对JSONiq和JSON来说真的很新。我的JSON或JSONiq部分出问题了吗?
答案 0 :(得分:2)
在您链接到的网站上,以下选择对我有用:
jsoniq version "1.0";
{ "supermarket_visit":{
"date":"08032019",
"bought":[
"item",{
"type":"confectionary",
"item_name":"Kit_Kat",
"number": 3,
"individual_price": 3.5
},
"item",{
"type":"drinks",
"item_name":"Coca_Cola",
"number": 2,
"individual_price": 3
},
"item",{
"type":"fruits",
"item_name":"apples",
"number": "some"
}
],
"next_visit":[
"item",{
"type":"stationary",
"item_name":"A4_paper",
"number": 1
},
"item",{
"type":"stationary",
"item_name":"pen",
"number": 2
}
]
}
}.supermarket_visit.bought()[$$ instance of object and $$.individual_price le 3].item_name
答案 1 :(得分:0)
原始查询可以稍作修改(以保持FLWOR表达式):
jsoniq version "1.0";
let $document := { (: put the document here :) }
for $x in $document.supermarket_visit.bought[]
where $x instance of object and $x.individual_price le 3
return $x.item_name
请注意,try.zorba.io是Zorba(2.9)的旧版本,未实现最新的稳定JSONiq版本。这就是为什么在此特定页面上必须使用()而不是[]的原因。如果您下载了最新版本的Zorba,则上面的查询应该可以使用。
此外,问题中提供的原始文档也不是格式正确的JSON,因为它在“ next_visit”上方的行中包含特殊的em空格字符(Unicode 2003)。必须删除此字符才能成功解析此JSON。