json - 将 xquery 结果存储为 json

标签 json serialization exist-db

我正在使用 eXist-db 4.7.0,我想将 XQuery 的结果存储为 JSON。 目前,我有一个使用序列化选项返回 JSON 的 XQuery:

xquery version "3.1";

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare namespace json = "http://www.json.org";
declare option output:method "json";
declare option output:media-type "application/json";

let $result as node() := element root {
    attribute json:array {"yes"},
    element data {
        attribute at1 {"1"},
        attribute at2 {"1"},
        element data1 {
            "test3"
        }
    }
}

return
    $result

whichs 返回不错的 JSON 内容:

[
    {
        "data": {
            "at1": "1",
            "at2": "1",
            "data1": "test3"
        }
    }
]

现在我想将生成的 JSON 直接存储到数据库中。我尝试将 return $result 子句替换为

return
    xmldb:store (
        '/db/services',
        'test1.json',
        $result
    )

但这将结果存储为

<root xmlns:json="http://www.json.org" json:array="yes">
    <data at1="1" at2="1">
        <data1>test3</data1>
    </data>
</root>

将 MIME 类型设置为 application/json 没有改变任何内容:

return xmldb:store(
    '/db/services',
    'test1.json',
    $result,
    'application/json'
)

我错过了什么或做错了什么?

最佳答案

被其所有者删除的答案(一旦恢复我会很乐意接受它)引导我走上正确的道路:调用 fn:serialize() $result 解决了问题(另请参阅 the eXist-db blog on XQuery 3.1 support )。

因此,按如下方式修改 return 子句解决了该问题:

return
    xmldb:store(
    '/db/services',
    'test1.json',
    serialize($result, map { 'method':'json'})
)

关于json - 将 xquery 结果存储为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56753724/

相关文章:

ruby-on-rails - 使用 httparty 发送 json 对象

python - 无法替换序列化 TextView 中的数据,字节数组大小问题?

xquery - 在什么时候加载变量?

json - 如何在 fluentd 中拖尾多个文件

javascript - 按匹配的对象字段数对对象数组进行排序

arrays - 如何使用Serde对大于32个元素的数组进行(反)序列化,例如[u8; 128]?

c# - 二进制反序列化问题 - 谁能帮忙?

xpath - 为什么 xmlstarlet 不选择所有节点?

xml - 检测 xml 中的间隙/第一个可用 ID :id sequence with XQuery/Xpath

java - 当我调用 Jenkins json api 时,如何判断构建是否正在进行?