Thanks Justin.  Makes perfect sense.  I missed the significance of that in the 
incompatibilities listing, but it’s right 
there<https://docs.marklogic.com/guide/relnotes/chap4#id_94947>.

Paul Williams | Technical Consultant
M: +1 402 203 2232 | Sk: paul.wms
[email protected]<mailto:[email protected]>


From: [email protected] 
[mailto:[email protected]] On Behalf Of Justin Makeig
Sent: Monday, March 23, 2015 4:53 PM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] ML8 Json

Paul,
You're constructing XML and trying to insert an object-node child. That's not 
allowed in MarkLogic 8. Previously xdmp:to-json returned a string, as there was 
no object-node type. In MarkLogic 8 we introduced new node types to represent 
JSON: object-node, array-node, null-node, boolean-node, and number-node. (JSON 
strings share text node types with their XML brethren.) In order to get the 
serialized string you should use xdmp:quote, as you suggest.

Justin


--
Justin Makeig
Director, Product Management
MarkLogic
[email protected]<mailto:[email protected]>

On Mar 23, 2015, at 2:45 PM, Paul Williams 
<[email protected]<mailto:[email protected]>>
 wrote:

In upgrading from ML6 to ML8 we have an issue in our application code where we 
are generating JSON for a client-side script.  I know there has been a huge 
change in JSON support, but can anyone tell me exactly what is going on here?

Sample code:
xquery version "1.0-ml";
let $obj :=
       <json:object xmlns:json="http://marklogic.com/xdmp/json";>
       <json:entry><json:key>name</json:key><json:value 
xsi:type="xs:string">world</json:value></json:entry>
       <json:entry><json:key>label</json:key><json:value 
xsi:type="xs:string">hello</json:value></json:entry>
       </json:object>
let $doc := xdmp:to-json(json:object($obj))
return
       <script type="text/javascript">var obj = {$doc}</script>

If you execute that in ML6, as expected, you get…
                <script type="text/javascript">var obj = {"name":"world", 
"label":"hello"}</script>

But in ML8, you get this error pointing at the highlighted reference
                XDMP-CHILDNODEKIND: $doc -- element nodes cannot have object 
node children

I’m not sure exactly what is the “element node” this message refers to.  I know 
that I can quote the reference (xdmp:quote($doc)) and make it work, but I’m 
trying to understand what specifically is different between ML6 & ML8 that is 
causing this problem so I can be sure of my workaround.
Any comments?
TIA

Paul Williams | Technical Consultant
M: +1 402 203 2232 | Sk: paul.wms
[email protected]<mailto:[email protected]>

_______________________________________________
General mailing list
[email protected]<mailto:[email protected]>
http://developer.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to