rv.
rv.

Reputation: 81

SyntaxError: Unexpected token u at Object.parse (native) NodeJS for JSON.parse()

I am in the learning stages of NodeJs and I was trying to get values of parameters from the json passed in the URL. I am using body parser because i saw many stack overflow answers using the same to parse through the data.

Below is the URL I am passing,

http://localhost:1337/login?json={username:rv,password:password}

I am getting the error mentioned below,

SyntaxError: Unexpected token u
at Object.parse (native)
at C:\Users\summer\Desktop\nodejs\practise3.njs:14:17
at Layer.handle [as handle_request] (C:\Users\summer\Desktop\nodejs\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\summer\Desktop\nodejs\node_modules\express\lib\router\route.js:131:13)
at Route.dispatch (C:\Users\summer\Desktop\nodejs\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\summer\Desktop\nodejs\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\summer\Desktop\nodejs\node_modules\express\lib\router\index.js:277:22
at Function.process_params (C:\Users\summer\Desktop\nodejs\node_modules\express\lib\router\index.js:330:12)
at next (C:\Users\summer\Desktop\nodejs\node_modules\express\lib\router\index.js:271:10)
at jsonParser (C:\Users\summer\Desktop\nodejs\node_modules\body-parser\lib\types\json.js:100:40)

The code is mentioned below,

var express = require('express');
var http = require('http');
var app = express();
var bodyparser = require('body-parser');

app.use(bodyparser.json());

app.get('/login',function(req,res,next){
    var content = '';
    var data = '';
    data = req.query.json;
    content = JSON.parse(data);        //I am getting the error here
    res.writeHead(200,{"Content-type":"text/plain"});
    res.write(data);
    res.end();
});

http.createServer(app).listen(1337);
console.log("Server Started successfully at Port 1337");

Note: After reading this question, if you know other alternatives for collecting values from json data, please do tell.

Upvotes: 4

Views: 27820

Answers (3)

Hari Das
Hari Das

Reputation: 10864

This happens because the key name must be enclosed within double quotes. Here is a workaround to overcome this issue:

var jsonObj = eval('(' + YOUR_JSON_STRING + ')');

Upvotes: -3

BenC
BenC

Reputation: 451

JSON.parse is choking because unlike Javascript, JSON requires all key names to be in quotes [0], so your JSON should be

{"username":rv,"password":password}

The error "Unexpected token u..." is occurring when the JSON parser encounters the "u" at the beginning of "username", when it expected a quotation mark.

[0] There is a very readable summary of the JSON spec at http://json.org.

Upvotes: 7

Subburaj
Subburaj

Reputation: 5192

Instead of this:

data = req.query.json;
content = JSON.parse(data);        //I am getting the error here

Try for this:

data = req.query.json;
var stringify = JSON.stringify(data)
content = JSON.parse(stringify);       

Upvotes: 8

Related Questions