1

我需要编写一个 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 部分有问题吗?

4

2 回答 2

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
于 2019-03-15T12:26:37.340 回答
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。

于 2019-03-15T14:01:10.630 回答