Разбор ответа в формате Json
Проблема возникла при попытке разобрать ответ от сервера:
var JSONObject = JSON.parse(http_request.responseText); responseText: "{"id": "0", "nr": "101", "st": "0"}" Возникает Uncaught Syntax Error: Unexpected token. Поигрался с JSON.parse:
function parseJSON1() {
var JSONText = '{"id": "0", "nr": "101", "st": "0"}';
var JSONObject = JSON.parse(JSONText);
alert(JSONObject.id);
}
function parseJSON2() {
var JSONText = "{"id": "0", "nr": "101", "st": "0"}";
var JSONObject = JSON.parse(JSONText);
alert(JSONObject.id);
}
Первый вариант (одиночные кавычки) работает, второй (двойные кавычки) нет. Почему JSON.parse не парсит responseText, данные, вроде, корректные? |
yv73, двойные кавычки внутри строки в двойных кавычках надо экранировать
alert( "12""34" ); // err alert( "12\"\"34" ); // run |
Да, спасибо, с функциями понятно, но с responseText не получается.
responseText: "{"id": "0", "nr": "101", "st": "0"}" - это ответ сервера, который я вижу в отладке. Если я добавляю экран кавычек на стороне сервера, в отладке вижу responseText: "{\"id\": \"0\", \"nr\": \"101\", \"st\": \"0\"}" и возникает ошибка "Unexpected token \" |
Раз так работает, значит и иначе должно работать.
var JSONText = '{"id": "0", "nr": "101", "st": "0"}';
var JSONObject = JSON.parse(JSONText);
alert(JSONObject.id);
Скорее всего вам сервер с какого-то х*я отдаёт JSON в дополнительных кавычках:
var JSONText = '"{"id": "0", "nr": "101", "st": "0"}"';
var JSONObject = JSON.parse(JSONText);
alert(JSONObject.id);
За такое вообще хозяину сервера руки поотрывать. Ну или вам, если это ваш косяк. Если не ваш, и ничего поделать нельзя, можно извратиться так:
var JSONText = '"{"id": "0", "nr": "101", "st": "0"}"';
var JSONObject = JSON.parse(JSONText.slice(1,-1));
alert(JSONObject.id);
P.S. Вам лучше использовать firefox для дебага, ибо он разжевывает ошибки для идиотов. Например в данном случае: error: JSON.parse: unexpected non-whitespace character after JSON data. |
| Часовой пояс GMT +3, время: 13:49. |