Кастинг JSON / XML в AS3 - PullRequest
       11

Кастинг JSON / XML в AS3

0 голосов
/ 01 ноября 2009

Использовав FlashDevelop с проектом, и переключившись на FDT / Eclipse. Я перебираю сотни предупреждений в своем коде.

Многие из них касаются синтаксиса XML и JSON, который использует этот проект. Далее я не уверен, что преобразовывать данные, содержащие XML, должны распознавать компилятор

.

Пример:

public function convertXMLToAssets(file:XML):void
{
    var data:XML = new XML(file.data);
    var id:int = data.item.id;
    //etc
}

//gives Warning: Could not resolve variable (may be a dynamic member) data at line 59 

Ответы [ 4 ]

1 голос
/ 01 ноября 2009

file: String не имеет свойства data (String.data недопустим). Это URLLoader? в этом случае измените его на file: URLLoader или что-то еще (возможно, Object?). Кроме того, я не вижу объявления переменной "i", это член класса?

1 голос
/ 02 ноября 2009

это не предупреждение, это реальная ошибка ... Строка не имеет данных свойств, как упоминал Кей ... Интересно, как вы вообще когда-либо делали эту компиляцию с FD ... вы компилировали с CS3 или с Flex SDK?

это должно быть что-то вроде

var data:XML = XML(file);
var id:int = data.item.id;/*if your xml looks something like 
          <%ROOT%>
                <item>
                    <id>%SOMEINT%</id>
                </item>
         </%ROOT%>*/

кстати, с JSON, используя as3corelib , это будет

var data:XML = JSON.decode(file);
var id:int = data.item.id;/*if your JSON looks something like
         { item : { id: %SOMEINT% } }

JSON и XML имеют крайне различную семантику, и XMLNode, которую вы упомянули, является ActionScript 2 Legacy, которую вы не должны использовать ... без обид, но я думаю, что вы должны рассмотреть либо JSON или учебник по XML / E4X, так как вы кодируете и то, что вы говорите, как-то заставляет меня поверить, что вы не поняли некоторые фундаментальные вещи, такие как общий процесс:

исходная строка --- синтаксический анализ / демаршаллинг ---> дерево промежуточных объектов --- обход ---> извлеченные данные

вы не можете напрямую работать с исходной строкой, и деревья промежуточных объектов не могут свободно обмениваться, и, таким образом, обход также зависит от используемого формата кодирования данных (вы не можете просмотреть проанализированный JSON с E4X, но опять же JSON является семантически эквивалентным представлением значений ActionScript)

0 голосов
/ 19 октября 2011

Я использую трюк, чтобы избежать подобных предупреждений.

Вместо обозначения data.item.id вы можете использовать data ['item'] ['id']

Да, это немного некрасиво, но с этим обозначением вы не получите предупреждения.

Не злоупотребляйте этой нотацией, поскольку это позволяет избежать проверки во время компиляции. Используйте его только в тех местах, где вы уверены, что это правильно и иначе не сможете избавиться от предупреждения. Например, с данными XML, как показано здесь.

0 голосов
/ 01 ноября 2009

Ну, поскольку в E4X все является либо объектами XML, либо строками, я очень сомневаюсь, что data.item[i].id может быть числом. Если идентификатор - число с плавающей запятой, используйте parseFloat(data.item[i].id), а если это просто int, используйте +data.item[i].id.

Редактировать: Есть ли более одного <item/>? Если это так, я думаю, вы хотите data..item[0].id. Вот некоторые вещи, которые, я думаю, вы можете попробовать:

  • data..item[0].id
  • data..item[0].@id
  • data.id
  • data.@id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...