使用 Jsoniq 显示 json 中的一些字符串

Using Jsoniq to display some of the string in json

你们能教我如何使用 jsoniq 显示 robin cruose 和 tom jones 这两个书名吗?我已经进行了一些研究,但无论我怎么做,它总是错的。

{
   "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

从 JSON 文档中获取一些叶值是使用导航语法完成的,它是 . 表示法。

它不需要 for 子句,因为 ..

隐含了迭代

假设对象存储在变量 $content 中,$content.books.reader 导航到具有字段 ReadHaventRead 的对象。调用 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")