Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.08.2012, 12:52
Новичок на форуме
Отправить личное сообщение для yv73 Посмотреть профиль Найти все сообщения от yv73
 
Регистрация: 08.08.2012
Сообщений: 2

Разбор ответа в формате 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, данные, вроде, корректные?
Ответить с цитированием
  #2 (permalink)  
Старый 08.08.2012, 13:15
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

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

alert( "12\"\"34" ); // run
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 09.08.2012, 04:31
Новичок на форуме
Отправить личное сообщение для yv73 Посмотреть профиль Найти все сообщения от yv73
 
Регистрация: 08.08.2012
Сообщений: 2

Да, спасибо, с функциями понятно, но с responseText не получается.
responseText: "{"id": "0", "nr": "101", "st": "0"}" - это ответ сервера, который я вижу в отладке. Если я добавляю экран кавычек на стороне сервера, в отладке вижу
responseText: "{\"id\": \"0\", \"nr\": \"101\", \"st\": \"0\"}"
и возникает ошибка "Unexpected token \"
Ответить с цитированием
  #4 (permalink)  
Старый 09.08.2012, 05:06
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

Раз так работает, значит и иначе должно работать.
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.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна отправка post запросов через jQuery в формате Json mstdmstd Events/DOM/Window 2 31.05.2012 15:08
Передать в ajaxupload данные в формате json ? SunYang AJAX и COMET 1 22.03.2012 08:21
IE не распознает ответ от сервера в формате JSON DIMANSIM Internet Explorer 0 26.11.2011 22:08
передача формой данных в JSON формате DarkN Элементы интерфейса 3 20.01.2011 18:45
Разбор ответа в формате Json Rush Общие вопросы Javascript 11 29.01.2010 16:57