Использование JSON со страницей XQuery - PullRequest
1 голос
/ 23 сентября 2011

Итак, я использую плагин jQuery (jsonp) для выполнения междоменного вызова API и получения данных JSON. Мне нужно как-то получить эти данные на моей странице XQuery. Я использую сервер Marklogic для хранения всех своих XML-данных, и я знаю, что у него есть некоторые функции XDMP для обработки данных JSON, мне доставляет боль JSON из javascript в XQuery.

Есть идеи, как это сделать?

1 Ответ

3 голосов
/ 23 сентября 2011

Я не уверен на 100%, что вызывает у вас проблемы, но постараюсь предложить решение, которое, надеюсь, поможет вам в этом.

На GitHub существует проект с открытым исходным кодом, который называется MLJSON (https://github.com/marklogic/mljson/wiki). Может принять строку JSON, проанализировать ее и вернуть XML-документ, который MarkLogic может легко использовать.

Если понимание внутренней структуры 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.

Надеюсь, это поможет.

...