【问题标题】:JSON.parse string - unexpected tokenJSON.parse 字符串 - 意外令牌
【发布时间】:2014-12-04 21:46:52
【问题描述】:

我正在尝试使用节点解析来自服务器的 JSON 响应,但它以字符串形式通过,例如:

"{name:'hello'}"

这是我如何重现确切的问题:

http://jsfiddle.net/x5sup14j/

我尝试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


【解决方案1】:

使用 SENCHA Ext.js 模块处理 JSON,我们可以调用解码函数完美解析 json。

http://docs.sencha.com/extjs/4.2.2/source/JSON.html#Ext-JSON

【讨论】:

  • 这不应该是公认的答案。依赖一个特定库的非标准行为来处理格式错误的 JSON 是一种不好的做法。为什么不直接从服务器发出正确的 JSON?
  • 它不是我的服务器。否则我会的。我讨厌使用不好的做法,但有时真的没有其他选择。
猜你喜欢
  • 1970-01-01
  • 2016-03-02
  • 2014-12-07
  • 1970-01-01
  • 2014-06-06
  • 2017-10-13
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多