xdmp:from-json-string( $arg as xs:string ) as item()*
Parses a string as JSON, returning an item sequence.
Parameters | |
---|---|
arg | JSON input to be parsed. |
A JSON object or string is parsed as a json:object
.
The JSON null value is represented as the empty sequence, and serializes
in a way that indicates it is a null value. Therefore, when the null value
is returned to JSON via xdmp:to-json
, the null value is
preserved.
Nested arrays in JSON are turned into nested sets of
json:array
s.
Any codepoints in the JSON string that aren't allowed in XML are rejected and an error is thrown.
xdmp:from-json-string('["a", null, false]') => 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 xsi:type="xs:string">a</json:value> <json:value xsi:nil="true"/> <json:value xsi:type="xs:boolean">false</json:value> </json:array>)
xquery version "1.0-ml"; let $json := '[{"some-key":45683}, "this is a string", 123]' return xdmp:from-json-string($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> <json:object> <json:entry key="some-key"> <json:value xsi:type="xs:integer">45683</json:value> </json:entry> </json:object> </json:value> <json:value xsi:type="xs:string">this is a string</json:value> <json:value xsi:type="xs:integer">123</json:value></json:array>) Note that what is shown above is the serialization of the XQuery items to a json:array. You can also use some or all of the items in the XQuery data model. For example, consider the following, which adds to the map based on the other values: xquery version "1.0-ml"; let $json := '[{"some-key":45683}, "this is a string", 123]' let $items := xdmp:from-json-string($json) let $put := map:put($items[1], xs:string($items[3]), $items[2]) return ($items[1], xdmp:to-json-string($items[1])) (: returns the following json:array and JSON string: 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="123"> <json:value xsi:type="xs:string">this is a string</json:value> </entry> </json:object>) {"some-key":45683, "123":"this is a string"} This query uses the map functions to modify the first json:object in the json:array. :)