2014-10-09 173 views
0

我試着使用節點來解析來自服務器的JSON響應,但其未來通過爲一個字符串像這樣的例子:JSON.parse串 - 意外的標記

"{name:'hello'}" 

這裏是我是如何重建的確切問題:

http://jsfiddle.net/x5sup14j/

我試過replace(/'/g, '"');去除單引號和JSON.stringify在一些toString()

以及拋

我似乎無法找出這一個>。 <

編輯

我已經建立了一個節點服務器收到了一些數據的請求,然後代理服務器通過到另一臺服務器。然後我保存一些來自響應的信息(http body)並將另一個對象返回給客戶端。下面我的代碼:

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}); 
      } 
     } 
    ); 

}); 
+10

這不是有效的JSON。這不僅僅是單引號,'name'也需要用雙引號括起來。這真的應該在服務器端修復。您可能可以在客戶端修復它,但這將非常繁瑣。 – 2014-10-09 20:23:24

+0

在嘗試「修復」之前,您是否可以修復不良數據的來源?如果沒有,還有其他不安全的方法來解決它。 – epascarello 2014-10-09 20:31:04

+0

沒有辦法解決它在其他服務器上。我將添加我正在使用的接收http響應的node.js代碼,也許它在我身邊我可以修復,因爲如果我通過控制檯使用ajax執行相同的操作,它將作爲json對象返回。 – 2014-10-09 20:33:15

回答

-1

使用SENCHA Ext.js模塊來處理JSON,我們可以調用解碼函數來完美地解析json。

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

+0

這不應該被接受的答案。依靠某個特定庫的非標準行爲來處理格式錯誤的JSON是不好的做法。你爲什麼不直接從服務器發出正確的JSON? – 2014-10-12 16:19:46

+0

它不是我的服務器。否則我會的。我討厭使用不好的練習,但有時候沒有其他選擇。 – 2014-10-12 16:22:07

+0

然後只是「評估」它。 – 2014-10-12 17:04:33