因此,我使用 jQuery 插件 (jsonp) 对 api 进行跨域调用并获取 JSON 数据。我需要以某种方式将这些数据放入我的 XQuery 页面。我正在使用 Marklogic 服务器来存储我的所有 XML 数据,并且我知道它有一些 XDMP 函数来处理 JSON 数据,它将 JSON 从 javascript 获取到 XQuery,这让我很痛苦。
关于如何解决这个问题的任何想法?
我不是 100% 确定是什么给您带来了问题,但会尝试提供一个解决方案,希望能让您顺利上路。
GitHub 上有一个名为 MLJSON ( https://github.com/marklogic/mljson/wiki )的开源项目。它可以接收 JSON 字符串,对其进行解析并返回 MarkLogic 可以轻松使用的 XML 文档。
如果理解 XML 的内部结构并不吸引人(尽管它相当简单,但没有记录),该项目还包括一个路径解析器,用于从解析的 JSON 文档中提取位。这是一个快速示例 XQuery 页面,它将一些 JSON 作为 POST 或 GET 参数发送到服务器,对其进行解析并提取一个值:
xquery version "1.0-ml";
import module namespace json="http://marklogic.com/json" at "lib/json.xqy";
import module namespace path="http://marklogic.com/mljson/path-parser" at "lib/path-parser.xqy";
let $jsonString := xdmp:get-request-field("json")
let $jsonXML := json:parse($jsonString)
let $firstName := path:select($jsonXML, "author.firstName", "json")
return concat("First name: ", $firstName)
如果上面的脚本传递了一个 JSON 文档,例如:
{
"author": {
"firstName": "Noam",
"lastName": "Chomsky"
}
}
它将返回字符串:“名字:Noam”。
MLJSON 有许多其他的特性,我不会在这里详细介绍,但会提到它具有构造 JSON 对象、数组等并将它们序列化为 JSON 字符串的函数。
希望有帮助。