你们可以教我如何使用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")

关于javascript - 使用Jsoniq在json中显示一些字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39417679/

10-12 15:40