SOAP-Antwort (XML) , JSON
Brauche ich, um zu konsumieren, ein SOAP-web-service, die, natürlich, sendet seine Antwort in XML, da ich die Entwicklung einer Appcelerator Titanium mobile app würde ich lieber die Antwort im JSON-Format. Nach der Suche online konvertierte ich die Antwort mit diese Javascript-code, hauptsächlich funktioniert es aber wieder Ergebnisse wie die folgenden:
{
"SOAP-ENV:Body" : {
"ns1:linkAppResponse" : {
"ns1:result" : {
#text : true;
};
"ns1:uuid" : {
#text : "a3dd915e-b4e4-43e0-a0e7-3c270e5e7aae";
};
};
};
}
Natürlich die Doppelpunkte und die hashes in der die Probleme verursacht, so habe ich angepasst, den code ein substring auf den Namen und drop-off nichts vor dem ':', dann a stringified die daraus resultierende JSON, entfernt alle hashes und analysiert die JSON wieder. Das ist ein bisschen unordentlich für meinen Geschmack, aber ich am Ende mit etwas Verwertbares.
Hier ist die xmlToJson code, den ich verwende:
//Changes XML to JSON
function xmlToJson(xml) {
//Create the return object
var obj = {};
if (xml.nodeType == 1) {//element
//do attributes
if (xml.attributes.length > 0) {
obj["@attributes"] = {};
for (var j = 0; j < xml.attributes.length; j++) {
var attribute = xml.attributes.item(j);
obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
}
}
} else if (xml.nodeType == 3) {//text
obj = xml.nodeValue;
}
//do children
if (xml.hasChildNodes()) {
for (var i = 0; i < xml.childNodes.length; i++) {
var item = xml.childNodes.item(i);
var nodeName = item.nodeName.substring(item.nodeName.indexOf(":") + 1);
if ( typeof (obj[nodeName]) == "undefined") {
obj[nodeName] = xmlToJson(item);
} else {
if ( typeof (obj[nodeName].push) == "undefined") {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xmlToJson(item));
}
}
}
return obj;
};
module.exports = xmlToJson;
Die Ergebnisse in der folgenden JSON:
{
Body : {
linkAppResponse : {
result : {
text : true;
};
uuid : {
text : "9022d249-ea8a-47a3-883c-0f4cfc9d6494";
};
};
};
}
Während dieser liefert ein JSON-Objekt, die ich verwenden kann, ich würde es vorziehen, um die resultierende JSON in der folgenden form:
{
result : true;
uuid : "9022d249-ea8a-47a3-883c-0f4cfc9d6494";
};
Meist so ist es weniger ausführlich, und ich kann rufen Sie einfach json.Ergebnis um zu überprüfen, ob die Abfrage erfolgreich war, anstelle von json.Körper.linkAppResponse.Ergebnis.text
Jede Hilfe wird sehr geschätzt.
key=value
es nutzt key:value
. Sind diese nur Beispiele? Sorry, habe nicht ich lese Ihre ganze postSie sind, was protokolliert, um die Konsole an, wenn ich call-Konsole.debug() auf das JSON-Objekt zurückgegeben. Ich bemerkte, dass es nicht ganz richtig, aber ich denke, das ist ein Ergebnis der tostring-Funktion verwendet, werde ich anpassen meine Frage, danke!
InformationsquelleAutor JonoCoetzee | 2013-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kam mit einer Lösung arbeiten, nicht weniger schmutzig, aber es funktioniert und liefert Daten in das format, das ich will.
Konsole.debug(json):
Konsole.debug(Antwort):
Ich werde diese Frage eine Weile offen, falls jemand kommt mit einer besseren Lösung.
InformationsquelleAutor JonoCoetzee