
xdmp:from-json( $arg as node() ) as item()*
Atomizes a JSON node, returning a JSON value.
| Parameters | |
|---|---|
| arg | 
    A node of kind object-node(), array-node(),
    text(), number-node(), boolean-node(),
    null-node(), or document-node().
   | 
	  
An object-node() atomizes as a json:object.
An array-node() atomizes as a json:array.
A null-node() atomizes as an empty sequence.
A boolean-node() atomizes as an xs:boolean.
A number-node() atomizes as an xs:integer,
     xs:decimal, or xs:double value.
A text() node atomizes as an xs:untypedAtomic.
A document-node() atomizes the same as its root.
This function returns the same result as fn:data,
     but it only works on JSON nodes.
To make a JSON node from a string, use xdmp:unquote
     with the "format-json" option.
xdmp:from-json(xdmp:unquote('["a", null, false]',(),"format-json"))
=>
json:array(
<json:array xmlns:xs="http://www.w3.org/2001/XMLSchema"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:json="http://marklogic.com/xdmp/json">
   <json:value>a</json:value>
   <json:value xsi:nil="true"/>
   <json:value xsi:type="xs:boolean">false</json:value>
</json:array>)
  
let $string := '[{"some-key":45683}, "this is a string", 123]'
let $node := xdmp:unquote($string,(),"format-json")
return xdmp:from-json($node)
=>
json:array(
<json:array xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:json="http://marklogic.com/xdmp/json">
  <json:value>
    <json:object>
      <json:entry key="some-key">
        <json:value xsi:type="xs:integer">45683</json:value>
      </json:entry>
    </json:object>
  </json:value>
  <json:value>this is a string</json:value>
  <json:value xsi:type="xs:integer">123</json:value></json:array>)
You can make changes to the json:object and json:array values returned by
xdmp:from-json.  The following uses the map:put function on the returned
json:object value to add a property, then returns the modified object
both as a value and as a node.
let $string := '[{"some-key":45683}, "this is a string", 123]'
let $node := xdmp:unquote($string,(),"format-json")
let $array := xdmp:from-json($node)
let $_ := map:put($array[1],$array[2],$array[3])
return ($array[1],xdmp:to-json($array[1]))
=>
json:object(
<json:object xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:json="http://marklogic.com/xdmp/json">
  <entry key="some-key">
    <json:value xsi:type="xs:integer">45683</json:value>
  </entry>
  <entry key="this is a string">
    <json:value xsi:type="xs:integer">123</json:value>
  </entry>
</json:object>)
{"some-key":45683, "this is a string":123}