将 xquery 结果存储为 json
Store xquery result as json
我正在使用 eXist-db 4.7.0,我想将 XQuery 的结果存储为 JSON。
目前,我有一个 XQuery returns JSON 使用序列化选项:
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
哪个returns不错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()
on the $result
solved the issue (see also the eXist-db blog on XQuery 3.1 support)。
因此,按如下方式修改 return 子句解决了问题:
return
xmldb:store(
'/db/services',
'test1.json',
serialize($result, map { 'method':'json'})
)
我正在使用 eXist-db 4.7.0,我想将 XQuery 的结果存储为 JSON。 目前,我有一个 XQuery returns JSON 使用序列化选项:
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
哪个returns不错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()
on the $result
solved the issue (see also the eXist-db blog on XQuery 3.1 support)。
因此,按如下方式修改 return 子句解决了问题:
return
xmldb:store(
'/db/services',
'test1.json',
serialize($result, map { 'method':'json'})
)