在未经过分类的Json中使用字符串化的Json

时间:2016-07-21 12:21:07

标签: javascript angularjs json node.js ionic-framework

我遇到了一个简单而又大的问题。

我得到的回复JSON是这样的:

{
    "responseCode":200,
    "response":"{\"success\":true,\"results\":[{\"_id\":\"57907ca4dc2a4ff43c6d1300\",\"user_email\":\"testuser9@hotmail.com\",\"user_displayName\":\"auauau\",\"user_gender\":2,\"user_registerDate\":\"2016-07-21T07:41:24.748Z\",\"user_timezone\":\"-540\",\"__v\":0,\"updatedOn\":\"2016-07-22T02:20:44.624Z\"\,\"user_images\":{\"avatarSmall\":\"n/a\",\"avatarLarge\":\"n/a\",\"coverSmall\":\"n/a\",\"coverLarge\":\"n/a\"},\"user_birthDate\":{\"status\":false,\"dateAndTime\":\"1994-12-01T07:00:00.000Z\"}}]}",
    "headers":{
    }
}

正如您所看到的,我得到的JSON无疑是JSON。

但是,内部myJson.response不是JSON。

我试过了:

 var inner = myJson.response;
 console.log("inner Json =", inner);                  //====1
 console.log("inner Json =", JSON.stringify(inner));  //====2
 inner = JSON.parse(inner);
 console.log("inner Json =", inner);                  //====3
 console.log("inner Json =", JSON.stringify(inner));  //====4

它们都不可用,也不是JSON。

环境是:

  • 服务器:NodeJS

  • 框架:Angularjs

  • 前端:离子

我使用$ cordovaTransferFile传输了一个文件 因为它不是$ http所以使用$ httpParamSerializer或$ httpProvider没有意义。

如何将myJson.response内的数据更改为可用的JSON?

编辑:对不起,JSON不是真正的数据。我在问你之前编辑了它,所以语法错误是由我产生的。 我已经变成了更像真实数据的东西,并且已经检查了语法。 我们使用nodeJS生成JSON,所以肯定JSON中不应该有任何语法错误。

2 个答案:

答案 0 :(得分:2)

这里有语法错误:"{\"success\":true,\"results\":[{\"_id\":\"123123123\",\"email\":\"abcdgmail.com\",\"name\":\"Sixty\",\"data\":[{\"subname\":\"subname2\",\"subDate\":\"01011990\"}]]

data是一个包含单个对象的数组:{\"subname\":\"subname2\",\"subDate\":\"01011990\"}

然后,数据位于您未关闭的另一个对象中: {\"_id\":\"123123123\",\"email\":\"abcdgmail.com\",\"name\":\"Sixty\",\"data\":[{\"subname\":\"subname2\",\"subDate\":\"01011990\"}]

你有两个]

EDIT 更正了它:

var json = {
    "responseCode":200,
    "response":"{\"success\":true,\"results\":[{\"_id\":\"123123123\",\"email\":\"abcdgmail.com\",\"name\":\"Sixty\",\"data\":[{\"subname\":\"subname2\",\"subDate\":\"01011990\"}]}]}",
    "headers":{
        }
};
var response = JSON.parse(json.response);
console.log(response);

EDIT2

使用新的JSON:

var json = {
    "responseCode":200,
    "response":"{\"success\":true,\"results\":[{\"_id\":\"57907ca4dc2a4ff43c6d1300\",\"user_email\":\"testuser9@hotmail.com\",\"user_displayName\":\"auauau\",\"user_gender\":2,\"user_registerDate\":\"2016-07-21T07:41:24.748Z\",\"user_timezone\":\"-540\",\"__v\":0,\"updatedOn\":\"2016-07-22T02:20:44.624Z\"\,\"user_images\":{\"avatarSmall\":\"n/a\",\"avatarLarge\":\"n/a\",\"coverSmall\":\"n/a\",\"coverLarge\":\"n/a\"},\"user_birthDate\":{\"status\":false,\"dateAndTime\":\"1994-12-01T07:00:00.000Z\"}}]}",
    "headers":{
    }
}
json.response = JSON.parse(json.response);
console.log(json);

使用上面的代码,您现在可以将json.response用作JSON对象。

答案 1 :(得分:1)

JSON.parse无效,因为myJson.response对象中存在语法错误。

检查以下

{
"success": true,
"results": [
              {
                    "_id": "123123123",
                    "email": "abcdgmail.com",
                    "name": "Sixty",
                    "data": [
                               {
                                "subname": "subname2",
                                "subDate": "01011990"
                               }
                            ]
               }// this is missing in your object
           ]
}