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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.05.2014, 14:56
KBAC вне форума Посмотреть профиль Отправить личное сообщение для KBAC Найти все сообщения от KBAC
  № 11  
Ответить с цитированием
KBAC
 
Аватар для KBAC

Регистрация: Jan 2006
Адрес: Москва (Нижний Новгород)
Сообщений: 229
Записей в блоге: 1
Отправить сообщение для KBAC с помощью Skype™
Зачем вам JSON, если у вас уже всё и так хорошо. Вы просто не то выводили в своём примере.
Код AS3:
 for each (var value:* in customers[i])
    {
        trace("Names", value);
    }
Вы здесь пытались вывести значение каждого поля объекта customers[i]. А вам нужно только поле "name".

Caseyrayan, ерунду-то не советуйте.
__________________
Будь проще.

Старый 29.05.2014, 15:03
skyboy вне форума Посмотреть профиль Отправить личное сообщение для skyboy Найти все сообщения от skyboy
  № 12  
Ответить с цитированием
skyboy

Регистрация: May 2014
Сообщений: 8
Цитата:
Сообщение от KBAC Посмотреть сообщение
Зачем вам JSON, если у вас уже всё и так хорошо. Вы просто не то выводили в своём примере.
Код AS3:
 for each (var value:* in customers[i])
    {
        trace("Names", value);
    }
ну я изначально по сети получаю json-файл
Цитата:
Сообщение от KBAC Посмотреть сообщение
Вы здесь пытались вывести значение каждого поля объекта customers[i]. А вам нужно только поле "name".

Caseyrayan, ерунду-то не советуйте.
Так я понял, что в том коде я получаю доступ к каждому полю. Но у меня не получается достучаться до поля name. Поэтому и спрашиваю, как сделать.

Старый 29.05.2014, 15:11
KBAC вне форума Посмотреть профиль Отправить личное сообщение для KBAC Найти все сообщения от KBAC
  № 13  
Ответить с цитированием
KBAC
 
Аватар для KBAC

Регистрация: Jan 2006
Адрес: Москва (Нижний Новгород)
Сообщений: 229
Записей в блоге: 1
Отправить сообщение для KBAC с помощью Skype™
Если на входе строка то парсите JSON'ом. Получаете объект - массив.
Ваша изначальная ошибка была, что вы проходите циклом по customers и начинаете выводить все поля (цикл for each), вместо того чтобы обратиться к свойству customers[i] напрямую: customers[i]["name"]
__________________
Будь проще.

Старый 29.05.2014, 15:13
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 14  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Код AS3:
var array:Array = [ { "name":"John", "email":"john@gmail.com" }, { "name":"Andrew", "email":"andrew@gmail.com" } ];
 
var length:int = array.length;
 
for (var i:int = 0; i < length; i++) 
		trace(array[i].name);
 
var string:String = '[ { "name":"John", "email":"john@gmail.com" }, { "name":"Andrew", "email":"andrew@gmail.com" } ]';
var json:Object = JSON.parse(string);
 
for (var key:String in json) 
		trace(json[key].name);

Старый 29.05.2014, 15:16
KBAC вне форума Посмотреть профиль Отправить личное сообщение для KBAC Найти все сообщения от KBAC
  № 15  
Ответить с цитированием
KBAC
 
Аватар для KBAC

Регистрация: Jan 2006
Адрес: Москва (Нижний Новгород)
Сообщений: 229
Записей в блоге: 1
Отправить сообщение для KBAC с помощью Skype™
То что вы писали в 12:29
Цитата:
Код AS3:
for (var i:int = 0; i < customers.length; i++)
{
    for each (var value:* in customers[i])
    {
        //customers[i] - это объект, у него есть поле name - второй цикл тут не нужен
        //value - это значение поля - строка ("John", "john@gmail.com" и т.д.)
        //у него неn быть поля name
        trace("Names", value.name);
    }
}
UPD: ошибку выдает 1069: Не удалось найти свойство name в String; отсутствует значение по умолчанию.
__________________
Будь проще.

Старый 29.05.2014, 15:22
skyboy вне форума Посмотреть профиль Отправить личное сообщение для skyboy Найти все сообщения от skyboy
  № 16  
Ответить с цитированием
skyboy

Регистрация: May 2014
Сообщений: 8
Если оставить customers, как массив, то в таком случае при выводе значений
Код AS3:
var customers:Array = [{"name":"John","email":"john@gmail.com"},{"name":"Andrew","email":"andrew@gmail.com"}];
for (var i:int = 0; i < length; i++)
{
    trace(customers[i].name);    // Выдает undefined
    trace(customers[i]["name"]); // Выдает undefined
}
Если использовать вариант LifeIsRhythm
Код AS3:
var customers:String = '[{"name":"John","email":"john@gmail.com"},{"name":"Andrew","email":"andrew@gmail.com"}]';
var obj:Object = JSON.parse(customers);
for (var key:String in customers)
{
    trace(obj[key].name); // Ничего не выводится
}

Старый 29.05.2014, 15:34
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 17  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Тему пролистал по диагонали.
Вот мой вариант (с использованием первоначальных данных)

Код AS3:
public class SkyBoyTest
{
	private static const EMAIL_PROP_NAME:String = "email";
	private static const NAME_PROP_NAME:String = "name";
 
	private var customers:Array = [{"name":"John","email":"john@gmail.com"},{"name":"Andrew","email":"andrew@gmail.com"}];
 
	public function SkyBoyTest()
	{
		var customerNames:Vector.<String> = getCustomersNames();
 
		for each(var name:String in customerNames) {
			var email:String = getCustomerEmailByName(name);
 
			trace("customer. name : " + name + ", email : " + email);
		}
	}
 
	public function getCustomersNames():Vector.<String>
	{
		var names:Vector.<String> = new Vector.<String>();
 
		for each(var customer:Object in customers) {
			if(NAME_PROP_NAME in customer) {
				var name:String = customer[NAME_PROP_NAME];
 
				names.push(name);
			}
		}
 
		return names;
	}
 
	public function getCustomerByName(name:String):Object
	{
		for each(var customer:Object in customers) {
			if(customer[NAME_PROP_NAME] == name) {
				return customer;
			}
		}
 
		return null;
	}
 
	public function getCustomerEmailByName(name:String):String
	{
		var customer:Object = getCustomerByName(name);
		var email:String = customer ? customer[EMAIL_PROP_NAME] : null;
 
		return email;
	}
}
На выходе:
Код:
customer. name : John, email : john@gmail.com
customer. name : Andrew, email : andrew@gmail.com
Хотя лично я распарсил бы этих кастомеров в типизированные объекты.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 29.05.2014, 15:38
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 18  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Цитата:
Если использовать вариант LifeIsRhythm
Потому, что Вы неправильно скопировали.

Старый 29.05.2014, 15:50
KBAC вне форума Посмотреть профиль Отправить личное сообщение для KBAC Найти все сообщения от KBAC
  № 19  
Ответить с цитированием
KBAC
 
Аватар для KBAC

Регистрация: Jan 2006
Адрес: Москва (Нижний Новгород)
Сообщений: 229
Записей в блоге: 1
Отправить сообщение для KBAC с помощью Skype™
Цитата:
Сообщение от LifeIsRhythm Посмотреть сообщение
Потому, что Вы неправильно скопировали.
причём оба раза
__________________
Будь проще.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от KBAC Посмотреть сообщение
Caseyrayan, ерунду-то не советуйте.
В чем ерунда? Ваш совет не меньшая ерунда. См. второй пост, прежде чем советовать это
Цитата:
Вы здесь пытались вывести значение каждого поля объекта customers[i]. А вам нужно только поле "name".
И вообще, автор похоже сам не знает что у него там приходит. Не понятно массив там или строка.
Проблема вообще элементарная. Решается за 20 секунд, если знать что там на самом деле за данные.
У меня такой вариант, когда сервер присылает строку типа:
Цитата:
[{"key" : "value"}, {"key", "value"}]
используется в проектах очень часто. И все это легко разруливает JSON парсер (не стандартный плееровский, а из as3corelib). Он сам знает как обработать данные и что вернуть. Если ему скормить такую строку, то он вернет массив объектов.
__________________
Ко мне можно и нужно обращаться на ты)

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

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

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


 


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


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