Страница 1 из 1

XML в JSON

Добавлено: 08 дек 2012, 20:43
manticore
Как изменить вот такой код во Flex?

Это получение данных XML:

Код: Выделить всё

public function setName(event:Event):void            {                var loader:URLLoader = URLLoader(event.target);                if(XML(loader.data).user.first_name.text().toString()!="")                {                    userName=XML(loader.data).user.first_name.text().toString()+" "+XML(loader.data).user.last_name.text().toString()                }                                if(XML(loader.data).user.photo_medium.text().toString()!="")                {                    photo_medium=XML(loader.data).user.photo_medium.text().toString();                }            }
А как это переделать, чтобы получать JSON?

Кому не трудно, можете объяснить на этом куске кода? :cry:

Re: XML в JSON

Добавлено: 08 дек 2012, 22:38
manticore
попытался сделать так:

Код: Выделить всё

public function setName(e:Event):void            {                var loader:URLLoader = URLLoader(e.target);                var decode:Array = JSON.decode(loader.data);                                    userName = decode[0].first_name.toString()+" "+decode[0].last_name.toString();                    photo_medium = decode[0].photo_medium.toString();                            }
Не помогло.

Response такой:

Код: Выделить всё

{"response":[{"uid":11028682,"first_name":"Сережа","last_name":"Тяглов","photo_medium":"http:\/\/cs403225.userapi.com\/v403225682\/2b88\/lbkMUD3tLJI.jpg"}]}

Re: XML в JSON

Добавлено: 09 дек 2012, 00:09
Alazaur
Так глянули б в вконтактовский APIConnection как сделано

Код: Выделить всё

      loader.addEventListener(Event.COMPLETE, function(e:Event):void{        var loader:URLLoader = URLLoader(e.target);        trace(loader.data);        var data: Object = JSON.decode(loader.data);        if (data.error) {          options.onError(data.error);        } else if (options.onComplete && (data.response != null)) {          options.onComplete(data.response);        }      });
За анонимные функции конечно руки б им оторвать :D но вам ж не они нужны

Если коротко, то не

Код: Выделить всё

decode[0].first_name.toString()
а

Код: Выделить всё

decode.response[0].first_name.toString()

Re: XML в JSON

Добавлено: 09 дек 2012, 10:10
manticore
Спасибо. А вот еще вопрос интересует. Ведь данный запрос к VK:

Код: Выделить всё

VK.api('users.get',{uids: flashVars.viewer_id, fields: 'photo_medium'}, setName, error);
должен при успешном выполнении делать функцию setName, а при ошибки error.
Так почему он не вызывает ни одну из этих функций, хотя проверял Charles, запрос без ошибок.
В чем может быть проблема?

Функция setName:

Код: Выделить всё

public function setName(e:Event):void            {                var loader:URLLoader = URLLoader(e.target);                                var decode:Array = JSON.decode(loader.data);                                userName=decode.response[0].first_name.toString()+" "+decode.response[0].last_name.toString();            }
Функция error:

Код: Выделить всё

public function error():void {                Alert.show("Ошибка запроса!");            }

Re: XML в JSON

Добавлено: 09 дек 2012, 10:15
Casperovskii
Фишка в том, что события нет вроде как. Нужно так:

Код: Выделить всё

public function setName(setNameResponse:Array):void
Т.е. у тебя переменные для функции неправильно заданы. Vk.api возвращает ответ в виде массива, а не событие.

Re: XML в JSON

Добавлено: 09 дек 2012, 10:24
manticore
Работает, только если я убираю часть выше.

Код: Выделить всё

public function setName(setNameResponse:Array):void            {                var loader:URLLoader = URLLoader(setNameResponse); // насчет этого не уверен ;(                                var decode:Array = JSON.decode(loader.data);                                name_heroes.text = "1";            }
Работает если убрать:

Код: Выделить всё

public function setName(setNameResponse:Array):void            {                name_heroes.text = "1"; // так работает отлично и выводит.            }
Что не так написано выше?

Re: XML в JSON

Добавлено: 09 дек 2012, 10:33
Casperovskii
manticore
Добавь в функцию SetName строку trace("Функция сработала") и проверь локально. Ну или просто сделай что-то, что точно выполнится. Мне кажется, ошибка в

Код: Выделить всё

userName=decode.response[0].first_name.toString()+" "+decode.response[0].last_name.toString();
Зачем декодить джсон? Да и лоадера у вас же нет...
Я делал так:

Код: Выделить всё

public function setName(setNameResponse:Array):void            {                userName=setNameResponse[0].first_name+" "+setNameResponse[0].last_name;            }
UPD: нет у вас лоадера в е.таргет. Он обращается к пустой переменной. Нужно сделать как у меня, потому что Апи возвращает массив, который и передается в исполняемую функцию

Re: XML в JSON

Добавлено: 09 дек 2012, 10:37
manticore
Спасибо большое, все работает :)