2017-06-21 1 views
-3

Nach einer GET-Anforderung von einem Server abrufen ich als Antwort erhalte diese:Parsen Javascript-Code als Antwort

variable1 = ["something", ["a","b","c"], ["more stuff"]] 

Ich brauche ["a","b","c"] die variable1[1] Array zu extrahieren, um in meinem JS-Code verwendet werden.

(Ich verwende NodeJS für die Anforderung - es ist eine serverseitige Anforderung an einen externen Web-Service, die ich keine Kontrolle haben)

+3

Kühl. Was hast du probiert? Wo bist du stecken geblieben? Kennen Sie 'JSON.parse' und' String.prototype.split'? –

+0

Was? Ich verstehe nicht... – Ionut

+0

Ich nehme an, das soll JSON sein ... also wenn ja, lesen Sie weiter, wie man damit arbeitet. – CBroe

Antwort

2

Ich bin Ihr Rückgabewert angenommen wird, eine Zeichenfolge, die den vollständigen Ausdruck enthält.

Angenommen, Sie haben dies in einem String:

'variable1 = ["something", ["a","b","c"], ["more stuff"]]'

und Sie wollen variable1[1] Bedeutung abzurufen: ["a","b","c"]

Sie die Zeichenfolge von = aufspalten es dann mit JSON.parse() gefolgt analysieren, indem sie Abfragen für den gewünschten Index [1] wie unten:

var x = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]'; 
 
var y = JSON.parse(x.split('=')[1])[1]; 
 

 
console.log(y);

Wie Sie die Antwort bereits akzeptiert hatte ich die unten Lösung darin verlassen würde, aber die oben empfehlen.

Sie können auch eine neue Funktion und gibt den Ausdruck Ergebnis, ähnlich wie diese erstellen:

var x = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]'; 

var y = new Function('return ' + x); 

Sie können dann zurück, was Sie ähnliche wollen variable1[1]

Warnung erhalten
New Function() präsentiert möglicherweise die gleichen Risiken wie eval() und speziell beim Abruf expressi in JSON-Strings von einem Drittanbieter-Dienst, den Sie nicht kontrollieren können, könnten Sie bösartigen Code ausführen, ohne es zu wissen!

var x = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]'; 
 

 
console.log(new Function('return ' + x)()[1]);

+0

Sie sind fantastisch !! als du :)) – Mike

+3

@Mike Word of Warning obwohl - Wenn 'New Function()' die gleichen Probleme wie 'eval()' präsentiert, ist es möglicherweise nicht sicher zu verwenden, da Sie bösartigen Code ausführen könnten, ohne es zu wissen. – Nope

+0

@Fran Aus diesem Grund wäre die Aufspaltung von '=' und 'JSON.parse' der Ausdruck besser. –

0

Wenn Sie einen sicheren Weg, wollen den Wert dieses Ausdrucks zu bekommen, sollten Sie das Ergebnis Aufspaltung auf der ersten = dann JSON.parse auf dem Ausdruck zu tun.

const input = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]'; 
 
const expression = input 
 
    // Split the string on the equals sign 
 
    .split('=') 
 
    // Gather the pieces after the first one (just in case there's a "=" in the array) 
 
    .slice(1) 
 
    // Put it back together into a single string 
 
    .join(''); 
 
    
 
// Convert the string to an actual array 
 
const output = JSON.parse(expression); 
 
console.log(output);

Diese Methode vollständig die Sicherheitsprobleme mit Function, eval und verwandten Verfahren vermeidet.

Verwandte Themen