Как использовать JSONiq для JSON - PullRequest
1 голос
/ 30 марта 2019

Вопрос заключается в том, чтобы написать выражение JSONiq FLWOR, которое может отображать названия продуктов, цена которых не меньше 3.

Я попробовал ответы, предоставленные на Как запустить JSONiq из JSON с try.zorba.io , но это не те ответы, которые я ожидаю. Кроме того, я также пробовал много выражений JSON FLWOR, но все еще получал ошибки в try.zobia.io. Это мой файл JSON.

{
    "supermarket": {
        "visit": [ {
            "_type": "bought", 
            "date": "March 8th, 2019",
            "product": [ {
                    "name": "Kit Kat",
                    "amount": 3,
                    "cost": 3.5
                    },
                {
                    "name": "Coca Cola",
                    "amount": 2,
                    "cost": 3
                    },
                {
                    "name": "Apple",
                    "amount": "Some",
                    "cost": 5.9
                    }
                ]
            },  
            {
            "_type": "planning", 
            "product": [{
                    "name": "Pen",
                    "amount": 2
                    },
                {
                    "name": "Paper",
                    "amount": "One ream"
                    }
                ]
            }
        ]
    }
}

Это мое текущее выражение JSONiq.

jsoniq version "1.0";
let $a := { (: my JSON file :) }    
for $x in $a.supermarket.visit
let $y = $x.product()
where $y.price >= "3.0"
return $y.name

Окончательный результат должен быть Kit Kat, Coca Cola и Apple. Буду признателен за помощь в моем файле JSON или JSONiq.

1 Ответ

1 голос
/ 30 марта 2019

visit также является массивом, поэтому вам нужно круглые скобки, чтобы добраться до отдельных посещений в for.Это

jsoniq version "1.0";
let $data := { (: my JSON file :) }
for $visit in $data.supermarket.visit()
for $product in $visit.product()
where $product.cost ge 3
return $product.name

вернет

Kit Kat Coca Cola Apple

Поскольку вышеизложенное создает последовательность, вы можете использовать ее везде, где разрешены последовательности.

let $data := { (: my JSON file :) }
return string-join(
  for $visit in $data.supermarket.visit()
  for $product in $visit.product()
  where $product.cost ge 3
  return $product.name
, ", ")

Результат:

Kit Kat, Coca Cola, Apple

Конечно, это также будет работать:

for $product in $data.supermarket.visit().product()
where $product.cost ge 3
return $product.name
...