Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разбор ответа в формате Json (https://javascript.ru/forum/misc/30555-razbor-otveta-v-formate-json.html)

yv73 08.08.2012 12:52

Разбор ответа в формате 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, данные, вроде, корректные?

nerv_ 08.08.2012 13:15

yv73, двойные кавычки внутри строки в двойных кавычках надо экранировать
alert( "12""34" ); // err

alert( "12\"\"34" ); // run

yv73 09.08.2012 04:31

Да, спасибо, с функциями понятно, но с responseText не получается.
responseText: "{"id": "0", "nr": "101", "st": "0"}" - это ответ сервера, который я вижу в отладке. Если я добавляю экран кавычек на стороне сервера, в отладке вижу
responseText: "{\"id\": \"0\", \"nr\": \"101\", \"st\": \"0\"}"
и возникает ошибка "Unexpected token \"

Aetae 09.08.2012 05:06

Раз так работает, значит и иначе должно работать.
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:04.