У меня есть простая, но большая проблема.
Ответ JSON, который я получил, выглядит примерно так:
{
"responseCode":200,
"response":"{\"success\":true,\"results\":[{\"_id\":\"57907ca4dc2a4ff43c6d1300\",\"user_email\":\"[email protected]\",\"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.
У вас есть синтаксическая ошибка здесь: "{\"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\":\"[email protected]\",\"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.
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
]
}