2016-03-22 3 views
0

Wenn ich ein Feld in XML in einer Antwort mit node-soap konvertieren, möchte ich ein Feld zu einem Array zwingen, obwohl es ein Kind enthält.Node-Soap Force-Array, wenn Antwortfeld enthält ein Kind

Wenn nur ein Kind vorhanden ist, wird ein Feld als Objekt interpretiert. Bitte beachten Sie ein Beispiel unter:

// Below gives {ArrayOfItems: {Item: { name: 'foo', ... }} 
// But I'd like it to be {ArrayOfItems: {Item: [{name: 'foo', ... }]} 
<ArrayOfItems> 
    <Item> 
    ... 
    </Item> 
</ArrayOfItems> 

// Below gives {ArrayOfItems: {Item: [{ name: 'foo', ... }, { name: 'bar', ... }]} 
<ArrayOfItems> 
    <Item> 
    ... 
    </Item> 
    <Item> 
    ... 
    </Item> 
</ArrayOfItems> 

Wie kann ich zwingen, mein Feld als Array analysiert werden, wenn sie von XML konvertiert zum Objekt?

Antwort

1

Ich hatte das gleiche Problem mit LoopBack Enterprise SOAP-Connector und Node-Soap.

Die einfachste Abhilfe war ich fand eine einfache Methode zu haben, die die folgenden tut:

function forceArray(array) { 
     if (!array || Array.isArray(array)) 
     return array; 
     else 
     return [array]; 
} 

Ist das hilft?

+0

Ja, ich habe am Ende eine Funktion geschrieben, um etwas auf Array zu übertragen. Aber es scheint hacky. Gibt es andere Lösungen? –

+0

Sie können den Code von Node-Soap ändern, um eine * forceArray * Option zu akzeptieren, um dies für Sie durchzuführen ... aber dann - auf welcher Ebene wird es das Array erzwingen? nur an der Spitze? für jedes Kind der Top-Objekte? es ist sehr anwendungsspezifisch –