2016-03-15 79 views
2

是否有可能在XQuery中重建JSON對象?使用XML,它可以使用計算的構造函數來重建一個元素:從XQuery重建和轉換JSON對象

element { node-name($some-element) } { 
    (: Do stuff with $some-element/(@*|node()) :) 
} 

但是,使用JSON對象,它似乎是不可能的重構特性。我願做這樣的事情,但是,這將引發一個語法錯誤:即通過突變JSON對象

object-node { 
    for $p in $some-json-object/* 
    return node-name($p) : $p 
} 

看起來它是可能的解決方法:

let $obj := json:object(document{xdmp:from-json($json)}/*) 
let $_put := map:put($o, 'prop-name', $prop-val) 
return xdmp:to-json($o)/node() 

但是,這裏有一些明顯的侷限性。

回答

1

這可能對你有所幫助: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具有其他操作模式,並且可以從您自己的模式中獲取數據類型提示。但是我推薦內置的模式。

4

我害怕使用json:object真的是在這裏使用的方式。可能會更糟糕,但您只需要幾行即可複製所有json屬性。您也不需要該文檔構造函數,也不需要額外的類型轉換爲json:object。 xdmp:from-json已經返回一個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!