This looks to me as a fundamental data model problem. While it 'works' to some
extent in JSON,
its often problematic to mix attribute *values* with field/element *names*.
As in this example
"attributes": [
"entities/0C4kKs7/attributes/CountryOfOrigin",
...
"entities/0C4kKs7/attributes/CountryOfOrigin":
"2016-02-02T12:49:49.539Z",
That data model is a difficult one to work with in any language.
A great deal of programming design patterns in many languages will have a hard
time with this,
the most common being a mapping of JSON field names to program language
variables names.
Do you have any ability to change the data model at its source ?
e.g. to use a fixed set of field names/keys like
"attributes" : [
{ "name" : "entities/0C4kKs7/attributes/CountryOfOrigin" ,
"updated" : "2016-02-02T12:49:49.539Z"
},
...
Then this could end in XML like
<attributes>
<name> entities/0C4kKs7/attributes/CountryOfOrigin</name>
<updated>: "2016-02-02T12:49:49.539Z"
'...
or
<attributes>
<name
updated="2016-02-02T12:49:49.539Z">entities/0C4kKs7/attributes/CountryOfOrigin</name>
...
( the latter is probably easier to work with )
It will need some configuration options set from
https://docs.marklogic.com/json:config
to guide the transformation of arrays to repeated elements and fields to
attributes.
This solves both the XML transformation problem and the next problem you will
likely encounter -- how to use the data.
---
The alternative solution is to use the "basic" configuration ( json:config()
) --
That can handle any JSON you give it and produce valid XML that will round trip
exactly.
What it won't do is give you XML that 'looks nice'
The "custom" strategy is better at controlling XML to JSON conversion then the
reverse.
The "basic" strategy is 100% round trip from JSON to XML then back
The "full" strategy is the reverse. It is high fidelity (not quite 100%) round
trip form XML to JSON and back.
From: [email protected]
[mailto:[email protected]] On Behalf Of
[email protected]
Sent: Friday, February 19, 2016 5:15 PM
To: [email protected]
Subject: Re: [MarkLogic Dev General] Custom JSON objects
Hi All,
We are trying to convert json to xml. But some of our json key
contains "/" character in it.
Due to which the transformation (json:transform-from-json()) is failing with
invalid lexical.
Is there any other option to transform such json.
Is there any other method / custom code to do the transformation to resolve
this issue.
Error:
XDMP-QNAMELEXFORM: fn:QName("", "entities/0C4kKs7/attributes/CountryOfOrigin")
-- Invalid lexical form for Qname
Xquery:
import module namespace json="http://marklogic.com/xdmp/json" at
"/MarkLogic/json/json.xqy";
let $custom := json:config("custom")
let $transform :=
json:transform-from-json('
{
"crosswalks": [
{
"uri": "entities/0C4kKs7/crosswalks/1T5YWYSh",
"type": "configuration/sources/Reltio",
"value": "0C4kKs7",
"reltioLoadDate": "2016-02-19T01:01:42.324Z",
"createDate": "2016-02-02T12:48:43.627Z",
"updateDate": "2016-02-02T12:48:43.627Z",
"attributes": [
"entities/0C4kKs7/attributes/CountryOfOrigin",
"entities/0C4kKs7/attributes/IsVoid/BaNdOmc",
"entities/0C4kKs7/attributes/CountryOfOrigin/OaZKd0G",
"entities/0C4kKs7/attributes/OriginalReleaseYear/1T5YWLfv",
"entities/0C4kKs7/attributes/MPMNumber/1T5YW0Md",
"entities/0C4kKs7/attributes/Identifiers/1T5YW8t9/ID/1T5YWHPf",
"entities/0C4kKs7/attributes/BoxOffice/1T5YWPwB/DomesticBoxOffice/1T5YWUCR",
"entities/0C4kKs7/attributes/OriginalMadeFor/1QDXr7WM",
"entities/0C4kKs7/attributes/BoxOffice/1T5YWPwB",
"entities/0C4kKs7/attributes/Type/1QDXqqTK",
"entities/0C4kKs7/attributes/LibraryTitle/1T5YW4ct",
"entities/0C4kKs7/attributes/CountryOfOrigin/OaZI9Yy",
"entities/0C4kKs7/attributes/Identifiers/1T5YW8t9/Type/1T5YWD9P",
"entities/0C4kKs7/attributes/Identifiers/1T5YW8t9"
],
"singleAttributeUpdateDates": {
"entities/0C4kKs7/attributes/CountryOfOrigin":
"2016-02-02T12:49:49.539Z",
"entities/0C4kKs7/attributes/IsVoid/BaNdOmc":
"2016-02-19T01:01:42.324Z",
"entities/0C4kKs7/attributes/CountryOfOrigin/OaZKd0G":
"2016-02-02T13:01:51.933Z",
"entities/0C4kKs7/attributes/OriginalMadeFor/1QDXr7WM":
"2016-02-02T12:50:57.215Z",
"entities/0C4kKs7/attributes/Type/1QDXqqTK":
"2016-02-02T12:49:09.023Z",
"entities/0C4kKs7/attributes/CountryOfOrigin/OaZI9Yy":
"2016-02-02T12:49:34.433Z"
}
}
]
}
', $custom)
return
$transform
Thanks & Regards,
Santhosh
This e-mail and any files transmitted with it are for the sole use of the
intended recipient(s) and may contain confidential and privileged information.
If you are not the intended recipient(s), please reply to the sender and
destroy all copies of the original message. Any unauthorized review, use,
disclosure, dissemination, forwarding, printing or copying of this email,
and/or any action taken in reliance on the contents of this e-mail is strictly
prohibited and may be unlawful. Where permitted by applicable law, this e-mail
and other e-mail communications sent to and from Cognizant e-mail addresses may
be monitored.
_______________________________________________
General mailing list
[email protected]
Manage your subscription at:
http://developer.marklogic.com/mailman/listinfo/general