1

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

4

1 に答える 1

1

JSON ドキュメントからいくつかのリーフ値を取得するには、ナビゲーション構文 (.表記法) を使用します。

for反復は . で暗黙的に行われるため、句は必要ありません.

オブジェクトが変数$contentに格納されていると仮定する$content.books.readerと、フィールドReadおよび を含むオブジェクトに移動しますHaventRead。を呼び出すjnlib:values()と、そこに 2 つのオブジェクトが取得され、1 つが.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

ネイティブのJSONiqjsoniq version="1.0";パーサーをアクティブにすることに注意してください (デフォルトのパーサーtry.zorba.ioは XQuery です)。

zorba.ioでテストすることもできます

ノート

JSONiq は XQuery の拡張機能としても存在します。この場合、.は XML 名で有効な文字であるため、ナビゲーションは関数呼び出しで行われます。ただし、XML も処理する場合を除き、これを使用することはお勧めしません。

jnlib:values($content("books")("reader"))("book")("name")
于 2016-09-09T18:45:37.283 に答える