Использование Jsoniq для отображения некоторых строк в json
Не могли бы вы, ребята, научить меня, как использовать jsoniq для отображения названия книги - Робин Круз и Том Джонс? Я прошел какое-то исследование, но независимо от того, как я это делаю, это всегда неправильно.
{
"books": {
"reader": {
"Read": {
"book": {
"name": "Robinson Crusoe",
"author": "Daniel Defoe"
}
},
"HaventRead": {
"book": {
"name": " Tom Jones",
"author": "Henry Fielding "
}
},
"_type": "Ken Rawing"
}
}
}
Именно так я и поступил в zorba.io, и там было много ошибок, я уверен, что то, что я сделал, совершенно неверно. Пожалуйста, научите меня
for $reader in collection("books"),
$read in collection("books"),
$book in collection ("books")
where $reader.type eq "Ken Rawing"
return $book
1 ответ
Получение некоторых конечных значений из документа JSON выполняется с помощью синтаксиса навигации, который является .
нотации.
Это не нужно for
пункт, так как итерация неявно с .
,
Предполагая, что объект хранится в переменной $content
, $content.books.reader
перемещается к объекту с полями Read
а также HaventRead
, призвание jnlib:values()
затем получает два объекта там, а затем один продолжает весь путь до имени с .book.name
,
Запрос подобен такому (большая часть фактически является самим входным документом, который обычно хранится в файле или хранилище данных):
jsoniq version "1.0";
import module namespace jnlib = "http://jsoniq.org/function-library";
(: That's the input document, stored in a global variable :)
declare variable $content := {
"books": {
"reader": {
"Read": {
"book": {
"name": "Robinson Crusoe",
"author": "Daniel Defoe"
}
},
"HaventRead": {
"book": {
"name": " Tom Jones",
"author": "Henry Fielding "
}
},
"_type": "Ken Rawing"
}
}
};
(: That's the query :)
jnlib:values($content.books.reader).book.name
Следите за jsoniq version="1.0";
, который активирует собственный анализатор JSONiq (анализатор по умолчанию на try.zorba.io
это XQuery).
Это также можно проверить в zorba.io
Заметка
JSONiq также существует как расширение XQuery, и в этом случае навигация осуществляется с помощью вызовов функций, как .
является допустимым символом в именах XML. Тем не менее, не рекомендуется использовать это, если у вас нет XML, чтобы иметь дело с этим.
jnlib:values($content("books")("reader"))("book")("name")