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.

JSON nicht verwendet key=value es nutzt key:value. Sind diese nur Beispiele? Sorry, habe nicht ich lese Ihre ganze post
Sie 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

Schreibe einen Kommentar