2016-05-09 6 views
-2

Ich beginne in Node und treffe eine API. Ich versuche, eine String-Variable zu verwenden, die anstelle eines JSON-Parameters verwendet wird.Wie string var in JSON einfügen?

Lassen Sie mich mit dem Code beginnen, da es mehr Sinn machen

var http = require('http'); 
var fs = require('fs'); 

    // An object of options to indicate where to post to 
var post_options = { 
    host: 'localhost', 
    port: '8080', 
    path: '/api/scan', 
method: 'POST', 
headers: { 
    'Content-Type': 'application/json' 
} 
}; 

// Set up the request 
var post_req = http.request(post_options, function(res) { 
    res.setEncoding('utf8'); 
    var body = ''; 
    res.on('data', function (chunk) { 
    body += chunk; 
}); 
res.on('end', function() { 
    body = JSON.parse(body) 
    // Make sure it's working 
    console.log(body.response.subject); 
}); 
}); 

// post the data 
var url = 'ssl.com'; 
post_req.write('{"url": ' + url + ', "path":"/", "port":"443", "live_scan":"false", "advanced":"true"}'); 
post_req.end(); 

Wenn man sich die letzten drei Zeilen sehen, ich eine URL in einen String var url zu setzen versuchen und es dann in den Einsatz JSON. Ich

Dies ist der Fehler:

$ node example.js 
undefined:1 
SyntaxError: Unexpected token s<br> &nbsp; &nbsp;at Object.parse (native)<br> &nbsp; &nbsp;at parse (C:\projects\ssl-scanner\node_modules\body-parser\lib\types\json.js:88:17)<br> &nbsp; &nbsp;at C:\projects\ssl-scanner\node_modules\body-parser\lib\read.js:116:18<br> &nbsp; &nbsp;at invokeCallback (C:\projects\ssl-scanner\node_modules\body-parser\node_modules\raw-body\index.js:262:16)<br> &nbsp; &nbsp;at done (C:\projects\ssl-scanner\node_modules\body-parser\node_modules\raw-body\index.js:251:7)<br> &nbsp; &nbsp;at IncomingMessage.onEnd (C:\projects\ssl-scanner\node_modules\body-parser\node_modules\raw-body\index.js:308:7)<br> &nbsp; &nbsp;at emitNone (events.js:80:13)<br> &nbsp; &nbsp;at IncomingMessage.emit (events.js:179:7)<br> &nbsp; &nbsp;at endReadableNT (_stream_readable.js:913:12)<br> &nbsp; &nbsp;at _combinedTickCallback (node.js:377:13) 
^ 

SyntaxError: Unexpected token S 
at Object.parse (native) 
at IncomingMessage.<anonymous> (C:\projects\node\example.js:23:21) 
at emitNone (events.js:85:20) 
at IncomingMessage.emit (events.js:179:7) 
at endReadableNT (_stream_readable.js:913:12) 
at _combinedTickCallback (node.js:377:13) 
at process._tickCallback (node.js:401:11) 

Jetzt ist der Grund, warum ich das tue, weil ich schließlich Schleife durch eine Textdatei möchten, die eine Liste von URLs (eine auf jeder Zeile wie die enthält Trennzeichen wäre die neue Zeile) und setze url gleich jeder URL in der Liste und sende dann die Anfrage.

Alle Ideen und Vorschläge sind willkommen

-Hamza

+0

Sieht aus wie das Ergebnis Ihrer Anfrage in HTML anstelle von JSON ist. – nils

+0

nicht json von hand erstellen .... es gibt eine integrierte Methode dafür. Ihre derzeitige Art würde ungültiges json verursachen. –

Antwort

1

Wahrscheinlich erhalten Sie keine JSON-Antwort von der API, aber einen HTML-Code; Ein mögliches Problem könnte sein, dass Sie in Ihrer Anfrage keine richtige JSON-Zeichenfolge übergeben.

Verwendung JSON.stringify:

var data = { 
    'url': url, 
    'path': '/', 
    'port': 443, 
    'live_scan': false, 
    'advanced': true 
}; 

post_req.write(JSON.stringify(data)); 

Überprüfen Sie auch, was der Content-Type Header gesetzt ist, in der Antwort, die Sie erhalten, bevor es zu JSON.parse versuchen.

+0

Das war perfekt.Ich entschied, den JSON, den ich passierte, in seine eigene Variable zu verschieben: 'var url = 'ssl.com';' 'var catURL = {" url ": url," Pfad ":"/"," port ":" 443 "," live_scan ":" falsch "," fortgeschritten ":" true "};' 'post_req.write (JSON.stringify (catURL));' – hamza765

0

Wenn Sie den Backtrace Blick auf die Fehler, den Sie gibt, das Problem Zeile 23

bei incoming ist. (C: \ projects \ node \ example.js: 23: 21)

Diese Linie ist:

body = JSON.parse(body) 

Ich gehe davon aus, dass, was Sie öffnen nicht wirklich JSON ist, also, wenn Sie versuchen Sie JSON.parse darauf zu tun, es schlägt fehl. Sehen, wie der Fehler auch gesagt:

Unexpected token s<br> &nbsp; &nbsp; 

Wir können ziemlich sicher sein, dass Ihr Körper nicht JSON ist.

Versuchen Sie einfach, den Körper zu protokollieren und zu sehen, was es ist.

+0

Es ist ein riesiger verschachtelter JSON-Block: http://pastebin.com/q7WkaFfg – hamza765

+0

Mit diesem: https://jsonformatter.curiousconcept.com/ sieht es aus wie es ist nicht gültig JSON – Josh

+0

Insbesondere haben Sie tatsächliche Zeilenumbrüche in Ihren Zeichenfolgen, die Fehler verursachen . Wie bei jedem String können Sie nicht in einer neuen Zeile in der Mitte einer Zeichenfolge beginnen und dann die Zeichenfolge in der nächsten Zeile schließen. Ihr Beispiel ist auf etwa 15 Zeilen aufgeteilt. Ich löschte die neuen Zeilen und bekam den gesamten JSON in einer Zeile und es ist gültig, und sollte jetzt mit Ihrem Beispiel arbeiten: http://pastebin.com/FsDSMkaF – Josh