从 XQuery 重建和转换 JSON 对象
Reconstruct and transform JSON object from XQuery
是否可以在 XQuery 中重建 JSON 对象?使用 XML,可以使用计算构造函数重建元素:
element { node-name($some-element) } {
(: Do stuff with $some-element/(@*|node()) :)
}
但是使用JSON对象,似乎无法重建属性。我想做这样的事情,但这会引发语法错误:
object-node {
for $p in $some-json-object/*
return node-name($p) : $p
}
看起来可以通过改变 JSON 对象来解决这个问题:
let $obj := json:object(document{xdmp:from-json($json)}/*)
let $_put := map:put($o, 'prop-name', $prop-val)
return xdmp:to-json($o)/node()
但这有一些明显的局限性。
这可能对您有帮助:http://docs.marklogic.com/guide/app-dev/json
但是,我经常在 xQuery 中采用不同的方法(对 XML 感到满意)。这可能会遭到这里的一些人的反对,但这是我的方法:
在XML中构建你喜欢的东西,然后对其进行改造。如果您在 http://marklogic.com/xdmp/json/basic 命名空间中创建 XML,那么您可以使用 json:transform-to-json 将其转换为任何您想要的复杂 JSON - 因为所有数据类型的提示在 XML 的属性中。这种方法的好处在于它是一种很好的中间格式。我可以转换为 JSON - 或者我可以应用 XSLT 转换并根据需要获得其他 XML。
需要注意的是 json:transform-to-json 有其他操作模式,也可以从您自己的模式中获取数据类型提示。但我更喜欢内置架构。
恐怕用json:object真的是这里的用法。但可能更糟,您只需要几行即可复制所有 json 属性。您也不需要那个 document{} 构造函数,也不需要转换为 json:object 的额外类型。 xdmp:from-json 已经 returns 一个 json:object:
let $org := xdmp:from-json($json)
let $new := json:object()
let $_ :=
for $key in map:keys($org)
return map:put($new, $key, map:get($org, $key))
return xdmp:to-json($new)/node()
HTH!
我偶然发现了@paxstonhare 的这个博客 post,它使用非功能性方法,在树遍历过程中通过使用 map:put()
改变它们来重建新的 JSON 对象:
http://developer.marklogic.com/blog/walking-among-the-json-trees
是否可以在 XQuery 中重建 JSON 对象?使用 XML,可以使用计算构造函数重建元素:
element { node-name($some-element) } {
(: Do stuff with $some-element/(@*|node()) :)
}
但是使用JSON对象,似乎无法重建属性。我想做这样的事情,但这会引发语法错误:
object-node {
for $p in $some-json-object/*
return node-name($p) : $p
}
看起来可以通过改变 JSON 对象来解决这个问题:
let $obj := json:object(document{xdmp:from-json($json)}/*)
let $_put := map:put($o, 'prop-name', $prop-val)
return xdmp:to-json($o)/node()
但这有一些明显的局限性。
这可能对您有帮助:http://docs.marklogic.com/guide/app-dev/json
但是,我经常在 xQuery 中采用不同的方法(对 XML 感到满意)。这可能会遭到这里的一些人的反对,但这是我的方法:
在XML中构建你喜欢的东西,然后对其进行改造。如果您在 http://marklogic.com/xdmp/json/basic 命名空间中创建 XML,那么您可以使用 json:transform-to-json 将其转换为任何您想要的复杂 JSON - 因为所有数据类型的提示在 XML 的属性中。这种方法的好处在于它是一种很好的中间格式。我可以转换为 JSON - 或者我可以应用 XSLT 转换并根据需要获得其他 XML。
需要注意的是 json:transform-to-json 有其他操作模式,也可以从您自己的模式中获取数据类型提示。但我更喜欢内置架构。
恐怕用json:object真的是这里的用法。但可能更糟,您只需要几行即可复制所有 json 属性。您也不需要那个 document{} 构造函数,也不需要转换为 json:object 的额外类型。 xdmp:from-json 已经 returns 一个 json:object:
let $org := xdmp:from-json($json)
let $new := json:object()
let $_ :=
for $key in map:keys($org)
return map:put($new, $key, map:get($org, $key))
return xdmp:to-json($new)/node()
HTH!
我偶然发现了@paxstonhare 的这个博客 post,它使用非功能性方法,在树遍历过程中通过使用 map:put()
改变它们来重建新的 JSON 对象:
http://developer.marklogic.com/blog/walking-among-the-json-trees