2017-03-28 2 views
0

Ich konsumiere einen Webservice in Knoten js und es gibt mir die Antwort in diesem seltsamen Format zurück. Ich muss bestimmte Werte extrahieren, indem ich die Schlüsselnamen übergebe und ich möchte die Antwort in eine JSON konvertieren, um das Parsen zu vereinfachen. Wie soll ich vorgehen?Konvertieren einer Zeichenfolge in JSON in Knoten js?

Dies ist, was ich von der WebService

Data Source=*******;Initial Catalog=****;User ID=*******;Password= 
*******;MultipleActiveResultSets=True;Min Pool Size=5;Max Pool Size=5000;Conn 
ect Timeout=180;Application Name=***** 

Ich möchte extrahieren Datasource erhalten, Benutzer-ID, Passwort.

+2

Split zu Paaren mit '.split (';')', spaltete dann jedes Paar/v k mit '.split (' = ")". Dies kann schwieriger sein, wenn Werte ";" und "=" enthalten können. –

Antwort

1

Dario Antwort hat im Grunde den Trick, aber es lohnt sich zu wissen, dass querystring Moduls Node erledigt diese Art von Sachen „kostenlos“.

Der Code

const qs = require('querystring'); 
const s = `Data Source=*******;Initial Catalog=****;User ID=*******;Password=*******;MultipleActiveResultSets=True;Min Pool Size=5;Max Pool Size=5000;Connect Timeout=180;Application Name=*****`; 
console.log(qs.parse(s, ';', '=')); 

Ausgänge:

{ 'Data Source': '*******', 
    'Initial Catalog': '****', 
    'User ID': '*******', 
    Password: '*******', 
    MultipleActiveResultSets: 'True', 
    'Min Pool Size': '5', 
    'Max Pool Size': '5000', 
    'Connect Timeout': '180', 
    'Application Name': '*****' } 
1

Sie können es leicht analysieren mit String split:

const obj = response.split(';', 2).reduce((json, pair) => { 
    const tokens = pair.split('=', 2); 
    json[tokens[0]] = tokens[1]; 
    return json; 
}, {}); 

Sie es bearbeiten können, zu löschen oder Werte zu extrahieren und kodieren sie schließlich in JSON mit JSON.stringify(obj).

Hinweis: Wie Oleg V. Volkov kommentiert, wenn die Quellzeichenfolge delimeters (';' und '=') in Schlüssel oder Wert enthält, wird es nicht funktionieren.

0

Wenn das zurückgegebene Muster konstant ist, kann erreicht werden, regexp mit:

var result = str.match(/Source=(.*);Initial.*ID=(.*);Password=(.*);Multiple/) 

Und dann den gewünschten Werte von angepassten Gruppen nehmen.

DataSource = result[1]; 
UserId = result[2]; 
Password = result[3]; 
Verwandte Themen