【问题标题】:Stringified Json inside unstringified Json非字符串化 Json 中的字符串化 Json
【发布时间】:2016-11-25 00:58:57
【问题描述】:

我遇到了一个简单但很大的问题。

我得到的回复 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 中绝对不应该有任何语法错误。

【问题讨论】:

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


    【解决方案1】:

    这里有语法错误:"{\"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\"}]

    你有两个]在一起。

    编辑 更正的是:

    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 对象。

    【讨论】:

    • 是的,其中一个结果没有关闭。
    • 我很抱歉我的语法错误。但是你能再看一遍吗?非常感谢您的回答。
    【解决方案2】:

    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
               ]
    }
    

    【讨论】:

    • 我查了一下,发现是我的错。对不起,你能再看一遍吗?谢谢你的回答。
    • 你的意思是它仍然不工作?语法错误解决后?
    • 是的,语法错误是我自己的错误。编辑:我尝试进入内部,然后 JSON.parse(inner);但是,似乎外部 { } 使 innerJson 充当对象,因此无法解析。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多