Показать сообщение отдельно
Старый 12.03.2015, 09:26
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Ну, не правильная строка от сервера приходит. Кто сервер писал?
Дело тут совсем не в том, что там числа, а в том, что в простом массиве данные через двоеточие на записываются. То есть вместо вот такого:
Код AS3:
["0":{"slot":"1","item_id":"8","name":"\u0420\u0436\u0430\u0432\u044b\u0439 \u043c\u0435\u0447","price":"25","amount":"1"}]
Должно быть такое:
Код AS3:
{"0":{"slot":"1","item_id":"8","name":"\u0420\u0436\u0430\u0432\u044b\u0439 \u043c\u0435\u0447","price":"25","amount":"1"}}
Самое правильное решение - это сразу передавать с сервера строку в правильном формате.

Но если к серверу совсем нет никакого доступа, то можно придумать только костыльное решение, например с помощью регулярки
Код AS3:
var json_str:String = '[ "0":{"slot":"1","item_id":"8","name":"\u0420\u0436\u0430\u0432\u044b\u0439 \u043c\u0435\u0447","price":"25","amount":"1"},"1":{"slot":"1","item_id":"7","name":"\u041a\u043e\u0441\u0442\u0438","price":"100","amount":"2"},"2":{"slot":"2","item_id":"8","name":"\u0420\u0436\u0430\u0432\u044b\u0439 \u043c\u0435\u0447","price":"25","amount":"1"}]';
 
			/*
				создаем регулярное выражение, которое ищет любое количество чисел, 
				окруженных двойными кавычками, после которых опционально может быть
				какое-то количество пустых символов, потом двоеточие и потом опять
				опциональное количество пустых символов. Присваиваем эту выборку переменной
				$1, так как это первые скобки в регулярке
			*/
			var regExp:RegExp = /("\d+"\s*:\s*)/gi; 
			/*
				дальше заменяем содержимое переменной $1 на нее же, только перед ней 
				ставим фигурную скобку
			 */
			json_str = json_str.replace(regExp, "{$1");
			/*
				делаем то же самое для правой части
			 */
			regExp = /("}),/gi; 
			json_str = json_str.replace(regExp, "$1},");
			/*
				теперь ищем либо левую квадратную скобку в начале строки, перед которой и после
				которой так же могут быть опциональные пробелы в любом количестве,
				либо правую скобку, после которой могут быть опциональные пробелы, а потом сразу 
				конец строки. И заменяем это все на пустые строки
			 */
			regExp = /(^\s*\[\s*)|(\]\s*$)/gi;
			json_str = json_str.replace(regExp, "");
			// теперь JSON нормально распарсится
			trace(api.com.adobe.json.JSON.decode(json_str));