XML в JSON

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
Аватара пользователя
manticore
Сообщения: 119
Зарегистрирован: 08 дек 2012, 18:53

XML в JSON

Сообщение 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:
Аватара пользователя
manticore
Сообщения: 119
Зарегистрирован: 08 дек 2012, 18:53

Re: XML в JSON

Сообщение 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"}]}
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: XML в JSON

Сообщение 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()
Аватара пользователя
manticore
Сообщения: 119
Зарегистрирован: 08 дек 2012, 18:53

Re: XML в JSON

Сообщение 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("Ошибка запроса!");            }
Casperovskii
Сообщения: 429
Зарегистрирован: 22 июн 2012, 17:50

Re: XML в JSON

Сообщение Casperovskii »

Фишка в том, что события нет вроде как. Нужно так:

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

public function setName(setNameResponse:Array):void
Т.е. у тебя переменные для функции неправильно заданы. Vk.api возвращает ответ в виде массива, а не событие.
Аватара пользователя
manticore
Сообщения: 119
Зарегистрирован: 08 дек 2012, 18:53

Re: XML в JSON

Сообщение 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"; // так работает отлично и выводит.            }
Что не так написано выше?
Casperovskii
Сообщения: 429
Зарегистрирован: 22 июн 2012, 17:50

Re: XML в JSON

Сообщение 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: нет у вас лоадера в е.таргет. Он обращается к пустой переменной. Нужно сделать как у меня, потому что Апи возвращает массив, который и передается в исполняемую функцию
Аватара пользователя
manticore
Сообщения: 119
Зарегистрирован: 08 дек 2012, 18:53

Re: XML в JSON

Сообщение manticore »

Спасибо большое, все работает :)
Ответить