Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.12.2011, 21:25
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 1  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
По умолчанию Работа с JSON в FlashPlayer 11

Здравствуйте. Есть класс MCExample унаследованный от MovieClip. У него есть 2 свойства: prop1 и prop2.
Есть массив состоящий из обьектов класса MCExample. Нужно из этого массива создать строку в формате JSON.
Проблема в том, что метод JSON.stringify() пихает не только эти 2 свойства: prop1 и prop2 каждого элемента массива. Он туда всовывает все свойства, унаследованные от мувиклипа и все остольное унаследованное по цепочке аж до Object.
А мне нужно чтобы туда добавлялись лишь prop1 и prop2 каждого обьекта. Тоесть экземпляр класса MCExample с его единственными двумя свойствами. Подскажите, пожалуйста как это сделать. Знаю что это возможно. Надо похимичить над параметрами метода stringify() или переопределять метод toJSON(), но я не понимаю что это. Слишком умно как-то написано (хоть и на русском языке).

Добавлено через 16 минут
Все, наконец - то! С мыслью, что модераторы забанят за лень по строчке расшифровал адобовский язык. Значит, в классе MCExample надо создать метод
Код AS3:
public function toJSON(k:String):* {
      return {"prop1": prop1, "prop2": prop2};
}
Может кому пригодится.
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 20.12.2011 в 21:42.
Старый 20.12.2011, 21:51
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
это корявое решение

Старый 20.12.2011, 21:52
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 3  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Скажите, пожалуйста, а как сделать элегантно и более "быстроработающее"?
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 20.12.2011, 21:57
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
А вы в карму ему плюсаните, может подскажет.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 20.12.2011, 22:04
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 5  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Сначало код, а уж потом плюсик))
Ну как вариант. Ну я бы и как есть оставил.
Код AS3:
public function toJSONString():String 
{
      return '{"prop1": ' + prop1.toString() + ', "prop2": ' + prop2.toString() + '}';
}
Возможно будет быстрее, но менее универсально и легче ошибиться.
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 20.12.2011 в 22:08.
Старый 20.12.2011, 22:11
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 6  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от Inet_PC Посмотреть сообщение
Код AS3:
public function toJSONString():String 
{
      return '{"prop1": ' + prop1.toString() + ', "prop2": ' + prop2.toString() + '}';
}
Возможно будет быстрее, но менее универсально и легче ошибиться.
А разве стандартный JSON ищет при парсинге метод toJSONString()? В справке написано, что он ищет toJSON() в каждом проверяемом обьекте.
Если можно, еще вопрос об оптимизации. Приветствуется ли сокращения среди программистов? Например
Код AS3:
//Наши переменные	
var prop1:int = 384;
var prop2:Boolean = true;
//Вариант 1
//При создании строки JSON:
{ "prop1":prop1, "prop2":prop2 };
//получаем: {"prop1":384, "prop2":true }
//Вариант 2
//При создании строки JSON:
{ "p1":prop1, "p2":int(prop2) };
//получаем: {"p1":384, "p2":1}
Будет ли вариант 2 более благоприятным для парсера во время преобразования строки в обьект?
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 20.12.2011, 22:13
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 7  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
А разве стандартный JSON ищет при парсинге метод toJSONString()?
Это выдуманный мной метод.
Цитата:
Приветствуется ли сокращения среди программистов?
Так это надо с тем кто будет принимать строку договариваться (с серверным протоколом). А если в общем случае, то конечно да, чем меньше передаем данных тем быстрее все работает. Но минус тоже, читать такую строку (челоеку) будет треднее.
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 20.12.2011 в 22:16.
Старый 20.12.2011, 22:26
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 8  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Ну, учитывая, что пока "все" на мне и ключей всего 4-5, то буду стараться минимизировать строки. Спасибо за внимание.
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 19.02.2013, 18:52
rs7 вне форума Посмотреть профиль Отправить личное сообщение для rs7 Найти все сообщения от rs7
  № 9  
Ответить с цитированием
rs7
 
Аватар для rs7

Регистрация: Jun 2009
Сообщений: 56
Я вот всё равно не догоняю.

Справка

Цитата:
JSON.stringify() вызывает метод toJSON(), если он существует, для каждого общедоступного свойства, обнаруженного при прохождении объекта. Свойство содержит пару «ключ/значение». Когда stringify() вызывает метод toJSON(), он передает ключ, k, рассматриваемого в данный момент свойства. При типичной реализации метод toJSON() анализирует имя каждого свойства и возвращает желаемую кодировку его значения.
Прочитав справку я подумал что для экземпляра класса
Код AS3:
class A {
   public var a:int;
   public var b:int;
 
   public function toJSON(k:String):* { return "Trololo"; }
}
код
Код AS3:
JSON.stringify(new A());
выдаст
Цитата:
{"a":"Trololo","b":"Trololo"}

Старый 19.02.2013, 20:53
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 10  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
Код AS3:
package {
	import flash.display.Sprite;
 
	public class JSONTest extends Sprite {
		public function JSONTest() {
			trace(toJSON(new TestClass(), ITestClassInterface));
		}
	}
}
 
import flash.display.MovieClip;
import flash.utils.describeType;
 
interface ITestClassInterface {
	function get prop1() : String;
 
	function get prop2() : String;
}
 
class TestClass extends MovieClip implements ITestClassInterface {
	public function TestClass() {
		super();
	}
 
	public function get prop1() : String {
		return "123";
	}
 
	public function get prop2() : String {
		return "321";
	}
}
 
function toJSON(object : Object, fromInterface : Class) : String {
	var description : XML = describeType(fromInterface);
	var accessors : XMLList = description.factory..accessor;
	var resultObject : Object = {};
	for each (var accessor : XML in accessors) {
		var accessorName : String = accessor.@name.toString();
		resultObject[accessorName] = object[accessorName];
	}
	return JSON.stringify(resultObject);
}
Результат:
Код AS3:
{"prop1":"123","prop2":"321"}
__________________
Блог, Twitter
Брюзга.

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:06.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.