如何使用try.zorba.io从JSON运行JSONiq

时间:2019-03-15 11:50:04

标签: json xquery jsoniq

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

2 个答案:

答案 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。