Skip to content

Instantly share code, notes, and snippets.

@slattery
Forked from shadowdoc/mirth e4x to json
Last active August 29, 2015 14:15
Show Gist options
  • Save slattery/d0bb937b4313c8105959 to your computer and use it in GitHub Desktop.
Save slattery/d0bb937b4313c8105959 to your computer and use it in GitHub Desktop.
// One way converter from E4X XML to JSON
// 1) turns <body><item>1</item><item>2</item></body> into
// body: {item: ["1", "2"]} so that lists are easier to work with
// 2) turns things like: <body a="a">whatever</body> into
// body: {_a: "a", _: "whatever"}
// however <body>whatever</body> becomes simply body: "whatever
// - attributes specified by ignored are ignored
function E4XtoJSON(xml, ignored) {
var r, children = xml.*, attributes = xml.@*, length = children.length();
if(length == 0) {
r = xml.toString();
} else if(length == 1) {
var text = xml.text().toString();
if(text) {
r = text;
}
}
if(r == undefined) {
r = {};
for each (var child in children) {
var name = child.localName();
var json = E4XtoJSON(child, ignored);
var value = r[name];
if(value) {
if(value.length) {
value.push(json);
} else {
r[name] = [value, json]
}
} else {
r[name] = json;
}
}
}
if(attributes.length()) {
var a = {}, c = 0;
for each (var attribute in attributes) {
var name = attribute.localName();
if(ignored && ignored.indexOf(name) == -1) {
a["_" + name] = attribute.toString();
c ++;
}
}
if(c) {
if(r) a._ = r;
return a;
}
}
return r;
}
var json = '';
var new_msg = msg; // XML version of the message
var original = messageObject.getRawData(); // Raw HL7 message
new_msg.original_message = original.toString();
json = JSON.stringify(E4XtoJSON(new_msg), null, ' '); // Convert XML HL7 to json
// json = JSON.parse(json); // turn it back into a javascript object
// json.orignal_message = original.toString();
// json = JSON.stringify(json);
channelMap.put('xml', msg);
channelMap.put('json', json);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment