|- valign="top"
| {{Code|format}}
| Specifies the format for converting JSON data([[#Conversion Formats|see above]]).| {{Code|direct}}, {{Code|attributes}}, {{Code|basic}}, {{Code|jsonml}}, {{Code|xquery}}
| {{Code|direct}}
| ''parse'', ''serialize''
|- valign="top"
| {{Code|lax}}
| Specifies if a [[Conversion Module#Keys|lax approach is conversion rules]] are used to convert QNames to JSON names.
| {{Code|yes}}, {{Code|no}}
| {{Code|no}}
| Indicates if whitespace should be added to the output with the aim of improving human legibility. If the parameter is set as in the query prolog, it overrides the {{Code|indent}} [[Serialization|serialization parameter]].
| {{Code|yes}}, {{Code|no}}
| {{Code|yesno}}
| ''serialize''
|}
=Functions=
==json:parsedoc==
{| width='100%'
|-valign="top"| width='120' | '''SignaturesSignature'''|{{Func|json:parse|$string as xs:string?|item()?}}<br/pre>{{Func|json:parse|doc( $string href as xs:string?, $options as map(*)?| := map { }) as item()?}}</pre>|-valign="top"
| '''Summary'''
|Converts Fetches the JSON document referred to by the given {{Code|$stringhref}} and converts it to an XQuery value. If the input can be successfully parsed, it can be serialized back to the original JSON representation. The {{Code|$options}} argument can be used to control the way the input is converted.|-valign="top"
| '''Errors'''
|{{Error|parse|#Errors}} the specified input cannot be parsed as JSON document.<br/>{{Error|options|#Errors}} the specified options are conflicting.
|}
==json:docparse==
{| width='100%'
|-valign="top"| width='120' | '''SignaturesSignature'''|{{Func|json:doc|$uri as xs:string|item()?}}<br /pre>{{Func|json:doc|parse( $uri value as xs:string?, $options as map(*)?| := map { }) as item()?}}<br /pre>|-valign="top"
| '''Summary'''
|Fetches Converts the JSON document referred to by the given {{Code|$urivalue}} and converts it to an XQuery value. If the input can be successfully parsed, it can be serialized back to the original JSON representation. The {{Code|$options}} argument can be used to control the way the input is converted.|-valign="top"
| '''Errors'''
|{{Error|parse|#Errors}} the specified input cannot be parsed as JSON document.<br/>{{Error|options|#Errors}} the specified options are conflicting.
{| width='100%'
|-valign="top"| width='120' | '''SignaturesSignature'''|{{Func|json:serialize|$input as item()?|xs:string}}<br/pre>{{Func|json:serialize|( $input as item()?, $options as map(*)?| := map { }) as xs:string}}</pre>|-valign="top"
| '''Summary'''
|Serializes the specified {{Code|$input}} as JSON, using the specified {{Code|$options}}, and returns the result as string:
* The input is expected to conform to the results that are created by [[#json:parse{{Function||json:parse()]]}}.
* Non-conforming items will be serialized as specified in the [[XQuery 3.1#JSON Serialization|json output method]] of the official recommendation.
Values can also be serialized as JSON with the standard [[Serialization]] feature of XQuery:
* The parameter {{Code|method}} needs to be set to {{Code|json}}, and
* the options presented in this article need to be assigned to the {{Code|json}} parameter.
|-valign="top"
| '''Errors'''
|{{Error|serialize|#Errors}} the specified node cannot be serialized as JSON document.
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
let $database := "database"
for $name in file:list('.', false(), '*.json')
let $json := json:parse($file)
return db:add($database, $json, $name)
</syntaxhighlightpre>
'''Example 2: Converts a simple JSON string to XML and back'''
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
json:parse('{}')
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="xml">
<json type="object"/>
</syntaxhighlightpre>
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
(: serialize result as plain text :)
declare option output:method 'text';
json:serialize(<json type="object"/>)
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="'xquery"'>
{ }
</syntaxhighlightpre>
'''Example 3: Converts a JSON string with simple objects and arrays'''
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
json:parse('{
"title": "Talk On Travel Pool",
"generator": "http://www.flickr.com/"
}')
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="xml">
<json type="object">
<title>Talk On Travel Pool</title>
<generator>http://www.flickr.com/</generator>
</json>
</syntaxhighlightpre>
'''Example 4: Converts a JSON string with different data types'''
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
let $options := map { 'merge': true() }
return json:parse('{
]
}', $options)
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="xml">
<json numbers="age code" arrays="phone" objects="json address value">
<first__name>John</first__name>
</phone>
</json>
</syntaxhighlightpre>
==JsonML Format==
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
for $doc in collection('json')
let $name := document-uri($doc)
let $json := json:serialize($doc, map { 'format': 'jsonml' })
return file:write($name, $json)
</syntaxhighlightpre>
'''Example 2: Converts an XML document with elements and text'''
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
json:serialize(doc('flickr.xml'), map { 'format': 'jsonml' })
</syntaxhighlightpre>
'''flickr.xml:'''
<syntaxhighlight pre lang="xml">
<flickr>
<title>Talk On Travel Pool</title>
<generator>http://www.flickr.com/</generator>
</flickr>
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="json">
["flickr",
["title",
["generator",
"http://www.flickr.com/"]]
</syntaxhighlightpre>
'''Example 3: Converts a document with nested elements and attributes to JsonML'''
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
json:serialize(doc('input.xml'), map { 'format': 'jsonml' })
</syntaxhighlightpre>
'''input.xml:'''
<syntaxhighlight pre lang="xml">
<address id='1'>
<!-- comments will be discarded -->
<phone type='home'>212 555-1234</phone>
</address>
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="json">
["address", {"id":"1"},
["last_name",
["phone", {"type":"home"},
"212 555-1234"]]
</syntaxhighlightpre>
==XQuery Format==
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
let $input := '{
"Title": "Drinks",
$k || ': ' || string-join($v, ', ')
})
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="json">
Author: Jim Daniels, Jack Beam
Title: Drinks
</syntaxhighlightpre>
'''Example 2: Converts XQuery data to JSON'''
'''Query:'''
<syntaxhighlight pre lang="'xquery"'>
for $item in (
true(),
map { 'format': 'xquery', 'indent': 'no' }
)
</syntaxhighlightpre>
'''Result:'''
<syntaxhighlight pre lang="json">
true
"ABC"
[1,2,3,4,5]
{"Key":"Value"}
</syntaxhighlightpre>
=Errors=
! width="110"|Code
|Description
|-valign="top"
|{{Code|options}}
|The specified options are conflicting.
|-valign="top"
|{{Code|parse}}
|The specified input cannot be parsed as JSON document.
|-valign="top"
|{{Code|serialize}}
|The specified node cannot be serialized as JSON document.
=Changelog=
;Version 10.0
* Updated: {{Code|indent}}: Default changed from {{Code|yes}} to {{Code|no}}.
;Version 9.4
* Added: [[#json:doc{{Function||json:doc]]}}
; Version 9.1
* Updated: [[#json:parse{{Function||json:parse]] }} can be called with empty sequence.
;Version 9.0
;Version 7.7.2
* Updated: {{Code|$options}} argument added to [[#json:parse{{Function||json:parse]] }} and [[#json:serialize{{Function||json:serialize]]}}.* Updated: [[#json:parse-ml{{Function||json:parse-ml]] }} and [[#json:serialize-ml{{Function||json:serialize-ml]] }} are now ''deprecated''.
The module was introduced with Version 7.0.