【发布时间】:2014-12-04 21:46:52
【问题描述】:
我正在尝试使用节点解析来自服务器的 JSON 响应,但它以字符串形式通过,例如:
"{name:'hello'}"
这是我如何重现确切的问题:
我尝试replace(/'/g, '"'); 删除单引号,JSON.stringify 以及添加一些toString()
我似乎无法弄清楚这一点>.
.
.
编辑
我已经构建了一个节点服务器来接收包含一些数据的请求,然后代理到另一台服务器。然后我从响应(http 正文)中保存一些信息,并将另一个对象返回给客户端。这是我的代码:
var express = require('express');
var app = express();
var request = require('request');
var bodyParser = require('body-parser');
var mongo = require('mongojs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use('/login', function(req, res) {
request.post(
'http://192.168.1.53',
{ form: { req: 'auth', cid: '1', em: req.body.em, pw: req.body.pw, rm: true} },
function (error, response, body) {
//var body = JSON.parse(body);
if (!error && response.statusCode == 200 && body.success == true) {
user.res = res;
var cookies = response.headers['set-cookie'];
database.createUser(cookies, req.body.em, req.body.pw);
} else if (body.success == false) {
res.json({success: false, error: body.success});
} else {
res.json({success: false, error: error});
}
}
);
});
【问题讨论】:
-
不是有效的 JSON。不仅仅是单引号,
name也需要用双引号括起来。这真的应该在服务器端修复。您也许可以在客户端修复它,但这会非常乏味。 -
在你尝试“修复”它之前,你能修复坏数据的来源吗?如果没有,还有其他不安全的方法来修复它。
-
不,没有办法在其他服务器上修复它。我将添加我正在使用的接收http响应的node.js代码,也许它在我这边我可以修复,因为如果我通过带有ajax的控制台做同样的事情,它会作为一个json对象返回。
-
也许你可以使用 HanSON 之类的东西来解析传入的字符串,然后让它吐出有效的 JSON。 npmjs.org/package/hanson
-
马特伯兰有正确的答案。蒂莫西·斯特林普尔也是如此。 jsfiddle.net/x5sup14j/1 -- 你的小提琴,用正确的 JSON 更新,工作正常
标签: javascript json node.js parsing